C语言-文件中标准IO的常用函数总结

1. 标准IO常用的接口

标准IO常用的接口有:printf、scanf、fopen、fclose、fgetc、fputc、fgets、fputs、fread、fwrite…(由于printf和scanf我们以及很熟悉了本文不再讲解)。

1.1 FILE指针

FILE是一个结构体,fopen函数返回的就是一个结构体指针,这个FILE指针记录了打开文件的一切信息,我们在操作文件的时候就通过这个FILE完成。

typedef struct _IO_FILE FILE;

struct _IO_FILE {
	char* _IO_buf_base;    //缓冲区的起始地址
	char* _IO_buf_end;     //缓冲区的结束地址
   ...
}

在一个正在运行的程序中默认已经产生了三个FILE指针

stdin:标准输入,程序从终端读取数据的时候使用
stdout:标准输出,程序向终端输出数据的时候使用
stderr:标准出错

1.2 fopen函数

#include <stdio.h>

FILE *fopen(const char *pathname, const char *mode);
功能:使用标准IO接口打开文件
参数:
	@pathname:文件的路径和名字 例:"./hello.txt"
	@mode:文件打开的方式 例:"r","w"
		方式有:
		"r"		以只读的方式打开文件,将光标定位到开头
		
		"r+"	以读写的方式打开文件,将光标定位到开头
		
		"w"		以只写的方式打开文件,若文件不存在则创建文件,若文件
				存在则清空文件,将光标定位到开头
				
		"w+"	以读写的方式打开文件,若文件不存在则创建文件,若文件
				存在则清空文件,将光标定位到开头
				
		"a"		以追加的方式打开文件,若文件不存在则创建文件,若文件
				存在则将光标定位到结尾
				
		"a+"	以读和追加的方式打开文件,若文件不存在则创建文件,若
				文件存在不会清空,读的时候光标定位在开头,写的时候光
				标定位在结尾
返回值:成功返回FILE指针,失败返回NULL,只为错误码。

1.3 fclose函数

#include <stdio.h>

int fclose(FILE *stream);
功能:关闭文件
参数:
	@stream:文件指针
返回值:成功返回0,失败返回EOF(#define EOF (-1)),置位错误码

注:
如果文件没有关闭,在程序结束的时候,操作系统会自动回收

对于文件指针,只能关闭一次,不能关闭多次

如果在一个服务器,打开的文件不关闭,最后就不能够打开新的文件的,因为它属于资源,所以最好自己打开的文件就自己关闭

如果关闭了标准输入(stdin)就不能够在输入了,比如不能够调用scanf函数
如果关闭了标准输出(stdout),不能够使用printf函数

1.4 fgetc/fputc函数

int fgetc(FILE *stream);
功能:从文件中获取一个字符
参数:
	@stream:文件指针
返回值:成功返回字符的ascii,失败返回EOF

int fputc(int c, FILE *stream);
功能:向文件中输入一个字符
参数:
	@c:要输入的字符
	@stream:文件指针
返回值:成功返回字符的ascii,失败返回EOF

1.5 fgets/fputs函数

char *fgets(char *s, int size, FILE *stream);
功能:从文件中读取字符串
/*从文件中最多读取小于size的字符,并将其储存到s所指向的缓冲区中读取
在遇到EOF或者换行符('/n')后结束,如果读取换行符则将其储存到缓冲区
中,并将一个终止符NULL('\0')存储在缓冲区的最后一个字符之后*/
参数:
	@s:存储读取到的字符的首地址
	@size:想读取的大小
	@stream:文件指针
返回值:成功返回s,失败返回NULL

int fputs(const char *s, FILE *stream);
功能:向文件中写入字符串
/*向文件写入字符串,但是不包括字符串结尾的终止符'\0'*/
参数:
	@s:字符串的首地址
	@stream:文件指针
返回值:成功返回大于0的值,失败返回EOF

1.6 fread/fwrite函数

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
功能:从文件中读取数据到ptr中
参数:
	@prt:用来存储读取到的数据的首地址
	@size:每一项的大小
	@nmemb:项目的个数
	@stream:文件指针
返回值: 成功返回读到项目的个数,如果每一项的大小为1字节,则返回项目的
        个数就是字节的个数
        失败返回小于项目的个数或者是0
        如果失败需要通过ferror或者feof判断是哪种错误
        if(ferror(fp))
        {
        	printf("读的时候发生了错误\n");
        ]
        if(feof(fp))
        {
			printf("读取到文件的结尾了\n");
		}

size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);
功能:将ptr中的数据写到文件中
参数:
	@ptr:要向文件中写入数据的首地址
	@size:每一项的大小
	@nmemb:项目的个数
	@stream:文件指针
返回值:成功返回向文件中写入项目的个数
	    失败返回小于项目的个数或者是0

1.7 sprintf/snprintf/fprintf函数

int sprintf(char *str, const char *format, ...);
功能:将字符串格式化到str中,(sprintf在越界输入的时候会发生错误)
参数:
	@str:储存格式化后的字符串
	@format,...:可变参数,和printf里的写法完全相同
返回值:成功返回格式化后的字符个数,失败或遇到错误则返回负值

int snprintf(char *str, size_t size, const char *format, ...);
功能:将字符串格式化到str中
参数:
	@str:储存格式化后的字符串
	@size:输入的字符的个数,最后一个成员包含'\0'
	@format,...:可变参数,和printf里的写法完全相同
返回值:成功返回格式化后的字符个数,失败或遇到错误则返回负值

int fprintf(FILE *stream, const char *format, ...);
功能:将字符串格式化到对应的stream文件中
参数:
	@stream:文件指针
	@format,...:可变参数,和printf里的写法完全相同
返回值:成功返回格式化后的字符个数,失败或遇到错误则返回负值

1.8 fseek/ftell/rewind光标操作函数

int fseek(FILE *stream, long offset, int whence);
功能:用来设置光标的位置
参数:
	@stream:文件指针
	@offset:将光标设置(偏移)到哪里
		>0	向后偏移
		<0	向前偏移
		=0	不偏移
	@whence:从哪开始偏移
		SEEK_SET	开头
		SEEK_CUR	当前位置
		SEEK_END	结尾
返回值:成功返回0,失败返回-1,置位错误码

long ftell(FILE *stream);
功能:获取光标到开头的值(单位字符)
参数:
    @stream:文件指针
返回值:成功返回光标当前位置到开头的字符个数,失败返回-1,置位错误码

void rewind(FILE *stream);
功能:将光标设置到文件的开头
参数:
    @stream:文件指针
返回值:无

rewind(fp);等价于fseek(fp,0,SEEK_SET);

fseek(fp,0,SEEK_END);
ftell(fp);
这两句话就可以统计文件的大小
注:
如果文件是以a+/a的方式打开,通过fseek修改光标的位置,无效。写的内容永远在结尾。但是可以修改读的光标的位置。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜猫徐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值