C语言文件相关操作

C语言文件IO相关操作

C标准库I/O

  • 标准库IO接口
  • 一、fopen
  • 二、fwrite
  • 三、fread
  • 四、fseek
  • 五、fclose


标准库IO接口

C语言stdio会默认打开三个输入输出流,分别是stdin、stdout、stderr,这三个流的类型都是FILE* ,fopen返回值类型,文件指针。C语言标准库里面封装了很多文件操作的接口,本篇博客主要浅谈一下五个最重要的接口:fopen、fwrite、fread、fseek、fclose。


提示:本篇内容主要在Linux环境下进行。

一、fopen

C语言文件相关操作_第1张图片

打开文件:FILE *fopen(const char *path, const char *mode);

参数解释:
path:要打开的文件路径名称(不带路径默认为当前目录);
mode:文件的打开方式;
①“r”:打开一个文件用于只读(从起始位置开始),不能写,如果文件不存在则报错;
②“r+”: 打开一个文件可读可写且读写位置都是从文件起始位置开始,如果文件不存在则报错;
③“w”:打开一个文件只写(从起始位置开始,如果文件存在则清空文件内容然后再写),不能读,且如果文件不存在则创建文件;
④“w+”:可读可写(从起始位置开始),如果文件存在则清空文件内容然后再写,且如果文件不存在则创建文件;
⑤“a”:追加只写(从文件末尾追加),文件不存在则创建;
⑥“a+”:读+追加写(从文件末尾追加、从文件起始位置读),文件不存在则创建;
⑦“b”:对文件数据进行二进制操作;“rb”、“wb”、“ab+”等等。
返回值:一个结构体指针FILE*——文件流指针(文件的操作句柄);打开失败返回NULL。

二、fwrite

C语言文件相关操作_第2张图片

文件写入:size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);

参数解释:
ptr:要写入文件的数据;
size:块大小;
nmemb:块个数;块大小*块个数=总体写入长度(比如要在文件中写入100个字节的数据,分两块,每块50个字节);
stream:fopen返回的操作句柄。

返回值:成功则返回实际写入文件的完整块个数(如果块大小为100但是只写入了99个字节,返回0.),失败返回0,(这里会产生歧义);如果把块大小设为1,那么返回值就是实际写入的字节长度。

三、fread

C语言文件相关操作_第3张图片

文件读取:size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);

参数解释:
ptr:一块内存空间首地址,用于存放读取到的数据;
size:块大小;
nmemb:块个数;
stream:fopen返回的操作句柄。

返回值:成功返回实际读取到的完整块个数;错误返回0(有歧义);读取到文件末尾返回0,强烈建议使用fread时的块大小设置为1。

辅助接口:
int feof(FILE *stream);判断是否读到文件末尾;
int ferror(FILE *stream);判断本次读取是否出错。

四、fseek

C语言文件相关操作_第4张图片
文件位置设置:int fseek(FILE *stream, long offset, int whence);

参数解释:
stream:fopen返回的文件操作句柄;
offset:偏移量(可正可负,正为往后,负为往前);
whence:相对偏移起始位置;C语言文件相关操作_第5张图片
返回值:成功返回0,失败返回-1.

五、fclose

C语言文件相关操作_第6张图片
关闭文件,释放资源
int fclose(FILE *fp);

你可能感兴趣的:(C,文件流指针,I/O)