首页 > 其他分享 >44. 文件的打开和关闭

44. 文件的打开和关闭

时间:2024-09-02 14:53:51浏览次数:6  
标签:fp 文件 fopen FILE passwd 44 关闭 打开


1 文件指针

在C语言中用一个指针变量指向一个文件,这个指针称为文件指针

typedef struct
{
	short           level;	//缓冲区"满"或者"空"的程度 
	unsigned        flags;	//文件状态标志 
	char            fd;		//文件描述符
	unsigned char   hold;	//如无缓冲区不读取字符
	short           bsize;	//缓冲区的大小
	unsigned char   *buffer;//数据缓冲区的位置 
	unsigned        ar;	 //指针,当前的指向 
	unsigned        istemp;	//临时文件,指示器
	short           token;	//用于有效性的检查 
}FILE;

FILE是系统使用typedef定义出来的有关文件信息的一种结构体类型,结构中含有文件名、文件状态和文件当前位置等信息

声明FILE结构体类型的信息包含在头文件“stdio.h”中,一般设置一个指向FILE类型变量的指针变量,然后通过它来引用这些FILE类型变量。通过文件指针就可对它所指的文件进行各种操作

44. 文件的打开和关闭_开发语言

C语言中有三个特殊的文件指针由系统默认打开,用户无需定义即可直接使用:

  • stdin:标准输入,默认为当前终端(键盘),我们使用的scanf、getchar函数默认从此终端获得数据
  • stdout: 标准输出,默认为当前终端(屏幕),我们使用的printf、puts函数默认输出信息到此终端
  • stderr: 标准出错,默认为当前终端(屏幕),我们使用的perror函数默认输出信息到此终端

2 文件的打开

任何文件使用之前必须打开:

#include <stdio.h>
FILE * fopen(const char * filename, const char * mode);

功能:打开文件

参数:

filename:需要打开的文件名,根据需要加上路径

mode:打开文件的模式设置

返回值:

成功:文件指针

失败:NULL

第一个参数的几种形式:

FILE *fp_passwd = NULL;

//相对路径:
//打开当前目录passdw文件:源文件(源程序)所在目录
FILE *fp_passwd = fopen("passwd.txt", "r");

//打开当前目录(test)下passwd.txt文件
fp_passwd = fopen(". / test / passwd.txt", "r");

//打开当前目录上一级目录(相对当前目录)passwd.txt文件
fp_passwd = fopen(".. / passwd.txt", "r");

//绝对路径:
//打开C盘test目录下一个叫passwd.txt文件
fp_passwd = fopen("c:/test/passwd.txt","r");

第二个参数的几种形式(打开文件的方式):

打开模式

含义

r或rb

以只读方式打开一个文本文件(不创建文件,若文件不存在则报错)

w或wb

以写方式打开文件(如果文件存在则清空文件,文件不存在则创建一个文件)

a或ab

以追加方式打开文件,在末尾添加内容,若文件不存在则创建文件

r+或rb+

以可读、可写的方式打开文件(不创建新文件)

w+或wb+

以可读、可写的方式打开文件(如果文件存在则清空文件,文件不存在则创建一个文件)

a+或ab+

以添加方式打开可读、可写的文件。若文件不存在则创建文件;如果文件存在,则写入的数据会被加到文件尾后,即文件原先的内容会被保留。

注意:

  • b是二进制模式的意思,b只是在Windows有效,在Linux用r和rb的结果是一样的
  • Unix和Linux下所有的文本文件行都是\n结尾,而Windows所有的文本文件行都是\r\n结尾
  • 在Windows平台下,以“文本”方式打开文件,不加b:
  • n 当读取文件的时候,系统会将所有的 “\r\n” 转换成 “\n”
  • 当写入文件的时候,系统会将 “\n” 转换成 “\r\n” 写入
  • n 以"二进制"方式打开文件,则读写都不会进行这样的转换
  • 在Unix/Linux平台下,“文本”与“二进制”模式没有区别,“\r\n” 作为两个字符原样输入输出
int main()
{
	FILE *fp = NULL;
	// "\\"这样的路径形式,只能在windows使用
	// "/"这样的路径形式,windows和linux平台下都可用,建议使用这种
	// 路径可以是相对路径,也可是绝对路径
	fp = fopen("../test", "w");
	// fp = fopen("..\\test", "w");
	if(fp == NULL)
	{
		//perror()是标准出错打印函数,能打印调用库函数出错原因
		perror("open");
		return -1;
	}
	
	return 0;
}

3 文件的关闭

任何文件在使用后应该关闭:

  • 打开的文件会占用内存资源,如果总是打开不关闭,会消耗很多内存
  • 一个进程同时打开的文件数是有限制的,超过最大同时打开文件数,再次调用fopen打开文件会失败
  • 如果没有明确的调用fclose关闭打开的文件,那么程序在退出的时候,操作系统会统一关闭
#include <stdio.h>
int fclose(FILE * stream);

功能:关闭先前fopen()打开的文件。此动作让缓冲区的数据写入文件中,并释放系统所提供的文件资源。

参数:

stream:文件指针

返回值:

成功:0

失败:-1

FILE * fp = NULL;
	fp = fopen("abc.txt", "r");
	fclose(fp);


标签:fp,文件,fopen,FILE,passwd,44,关闭,打开
From: https://blog.51cto.com/zaishu/11898134

相关文章

  • 48. 获取文件状态
    xxxxxxxxxx#include<sys/types.h>#include<sys/stat.h>intstat(constchar*path,structstat*buf);功能:获取文件状态信息参数:path:文件名buf:保存文件信息的结构体返回值:成功:0失败-1structstat{ dev_tst_dev;//文件的设备编号 ino_tst_ino......
  • python微信小程序的网上图书商城书籍销售系统jn44t
    本论文的内容是关于书籍销售系统的设计与实现,主要内容不仅包括了系统的分析和设计还对几个主要模块进行详细阐述与分析。此书籍销售系统分为管理员操作和用户操作。用户的操作主要是可以在网页上浏览到首页,书籍信息,书籍资讯,购物车,我的等信息。管理员的操作,管理员登录后台进行操......
  • 像操作tar文件一样操作jar文件,让很多事情变得简单
    原创1024夜谭jar文件即Java归档文件,也称为jar包,是Java应用软件或库,通常聚合了大量的Java类文件、相关的元数据和资源文件。通常由构建工具产生,可以使用IDE、反编译工具或者Java诊断工具如Arthas等查看内容。如果你对tar命令使用得心应手,那么你将发现jar操作与tar操作有许多......
  • 导出/导入 docker 镜像文件
    在Docker中,导出和导入镜像通常不直接使用Docker的原生命令(如 dockersave 和 dockerload),而是可能会使用到Docker的镜像导出为文件(通常是tar文件)和从文件中导入镜像的功能。对于你提到的C++镜像(这里假设你已经有一个构建好的Docker镜像),下面是在CentOS7系统上导......
  • 春秋云镜CVE-2022-29464 (WSO2文件上传漏洞)
    目录一:访问靶机:2:根据提示知道可以文件上传3:两个方法一:访问靶机:2:根据提示知道可以文件上传3:我们两个方法1:使用EXPimportrequestsimporturllib3urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)url=input("请输入URL:")file="shell.jsp"pa......
  • 春秋云镜CVE-2022-28525(ED01-CMS v20180505 存在任意文件上传漏洞)
    1:访问靶机发现是登录界面2:尝试使用弱口令爆破(明文传输)3:添加pyload并选择攻击类型字典我们随便选择的,实际情况需要实际定义爆破成功,用户名:admin密码:admin登录成功4:找到如图模块,上传图片马上传成功(上传时需要抓包改上传类型)5:使用蚁剑连接,拿到flag......
  • 文件上传下载
    importcn.hutool.core.io.FileUtil;importcn.hutool.core.io.IoUtil;importlombok.SneakyThrows;importorg.apache.commons.lang3.StringUtils;importorg.apache.poi.ss.usermodel.Workbook;importorg.springframework.http.MediaType;importjavax.servlet.http......
  • TLC SSD强行关闭SLC缓存会怎样?
    如今的SSD不管是TLC闪存还是QLC闪存,都有SLC模拟缓存技术,在缓存内读写可以获得极高的速度。但你有没有想过,如果把这个功能关闭,会有什么变化?TechPowerUpSSD数据库维护者、资深内容编辑GabrielFerraz就做了一次试验,找来一块PichauAldrinPro2TBSSD,采用英韧IG5236主控、长江......
  • C语言 - 自包含和包含其他文件
    在C语言中,头文件的设计可以采用自包含和包含其他文件的方式,以提高代码的可维护性和可重用性。一、头文件自包含含义:头文件自包含是指一个头文件能够独立地进行编译,不依赖于其他头文件的特定包含顺序。这意味着头文件应该包含其自身所依赖的所有定义和声明,以确保无论在什么......
  • php遍历文件夹以及子目录;
    php遍历文件夹以及子目录<?phpfunctionmy_dir($folderPath){ $arr_subdictory=array(); if(@$handle=opendir($folderPath)){ while(false!==($entry=readdir($handle))){ if($entry!="."&&$entry!=".."){//排除更目录 ......