标准C库的文件io操作接口

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_40921797/article/details/81946542

先让我们来一起数一下常见的文件IO操作有哪些吧~
fopen 打开文件、fclose 关闭文件、fread 从文件中读取、fwrite 向文件中写入、fprintf 格式化标准写入
fseek 移动跳转指定读取或者写入位置

打开关闭文件操作

//打开
FILE *fopen(const char *path, const char *mode);
//参数1:文件路径默认是当前路径,参数2:文件访问权限字符串我们一会详细解读
FILE *fdopen(int fd, const char *mode);
//参数1:文件标识符什么是文件标识符我们后续详细解读,参数2:文件访问权限字符串
FILE *freopen(const char *path, const char *mode, FILE *stream);
//参数1:路径,参数2:文件访问权限字符串,参数3:需要被重定向的文件流

//关闭
fclose(FILE*fp);

文件访问权限字符串
r :以只读方式打开已经存在的文件,如果不存在则打开失败
r+ :以读写打开已经存在的文件,如果不存在则打开失败
w :以只写打开文件,若文件不存在则创建,创建的文件权限一般默认为664,若已存在则把文件长度截断为0,就是把文件原有内容全部都丢了,恢复为刚创建时状态
w+:以读写打开文件,文件不存在则创建,存在则文件长度截断为0
a :追加模式打开文件,以只写方式打开,从文件末尾开始写入数据
a+ : 读写追加,当打开的时候光标在起始位置,当写的时候,位置移动到文件末尾,读从文件起始位置开始读。
注意:当我们在W+格式时,可能出现有数据却,读不到数据的情况,有可能是当前已经在文件末尾了,可以用int feof(FILE *stream);判断是否在文件最后。

移动文件中光标位置操作

 int fseek(FILE *stream, long offset, int whence);
 //stream文件光标将指向以fromwhere位置为基准,偏移offset个字节的位置,成功函数返回0。

一般基准位置有:
文件头0(SEEK_SET),
当前位置1(SEEK_CUR),
文件尾2(SEEK_END)

文件写入读取操作

//写入
fwirte(const void *ptr,size_t size,size_t nmemb,FILE *stream);
//ptr要写入数据的指针,size要读的每个数据项的字节数,单位是字节,nmenb
要读取几个数据项写入,每个数据项size个字节,写入到stream文件

//读取
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
//和写入类似,从文件stream中读取nmemb个数据块,每块大小size,放如ptr指针指向的内存空间中

//标准化写入
int fprintf(FILE *stream, const char *format, ...);
//printf系列都采用可变参数,来传参

什么是可变参数列表,请看我另一篇博文可变参数列表剖析
下面在举一个例子:

  1 #include<stdio.h>
  2 #include<string.h>
  3 #include<errno.h>
  4 int main()
  5 {
  6     FILE *fp=NULL;
  7     fp=fopen("./tmp.txt","w+");
  8     if(fp==NULL)
  9     {
 10         perror("fopen error");
 11         return -1;
 12     }
 13     fwrite("hello world!\n",11,1,fp);
 14     fprintf(fp,"hehehehe\n");
 15     fseek(fp,0,SEEK_SET);
 16     char buff[1024]={0};
 17     fread(buff,20,1,fp);
 18     printf("%s\n",buff);
 19     fclose(fp);
 20     return 0;
 21 }

猜你喜欢

转载自blog.csdn.net/weixin_40921797/article/details/81946542