Linux:IO库函数

  在编写程序时,离不开IO操作,最常见的IO操作就是用printf函数进行打印,本文主要介绍的是封装后的IO库函数。

标准库IO函数

常使用的IO库函数如下:

函数作用
fopen打开指定的文件
fwrite向指定的文件写入数据
fread从指定的文件读取数据
fseek跳转到指定文件的读写位置
fclose关闭指定文件

一、fopen

FILE *fopen(const char *path, const char *mode);

 作用:用指定的方式打开指定的文件

  • const char *path:文件名(要带这个文件的路径)
  • const char *mode:文件的打开方式(只读、追加写等方式)

 返回值:成功返回FILE*文件流指针,通过这个指针来操作文件,失败返回NULL。

文件打开方式 mode:

  • r只读,文件必须存在,否则打开失败
  • r+可读可写,文件必须存在,否则打开失败
  • w只写,文件不存在会创建文件并打开,文件存在则会清空文件的原有内容并打开文件
  • w+可读可写,文件不存在会创建文件并打开,文件存在则会清空文件的原有内容并打开文件
  • a追加只写,文件不存在会创建文件并打开,文件存在则直接打开,写入数据时把数据写入到文件末尾
  • a+可读追加写,文件不存在会创建文件并打开,文件存在则直接打开,写入数据时把数据写入到文件末尾
  • b以二进制方式打开文件,否则默认以文本形式打开文件

 以上这些方式都是可以组合的,比如可以使用二进制打开并且可读追加写:ba+

二、fwrite

size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);

 作用:通过传递的文件流指针,向文件写入指定大小的数据。

  • const void *ptr:要向文件写入的数据的首地址
  • size_t size:要向文件写入数据的块大小。因为文件的写入和读取是以块为单位的,块大小就是把数据均分成几块,每块文件有多大。
  • size_t nmemb:要向文件写入数据的块的个数。
  • FILE *stream:文件流指针,表示要把数据写入到哪个文件

  返回值:返回实际写入文件的完整块的个数(1.5个块就返回1,0.5就返回0),出错返回0。

三、fread

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);

 作用:从指定的文件读取指定大小的数据。

  • void *ptr:用来存储读取到的数据的空间的首地址。
  • size_t size:要读取的块的大小。
  • size_t nmemb:要读取的块的个数。
  • FILE *stream:要操作的文件的文件流指针。

 返回值:成功返回实际读取到的完整块的个数,读取不足一块的返回0,读取到了文件末尾返回0,出错了返回0。因此返回值是有歧义的。

 因为返回值有歧义,因此通常把nmenb设置为要读取的数据的长度,把块的大小设置成1,这种方式可以明确通过返回值判断,到底有没有读取到数据。还可以使用下面两个函数来帮助判断返回值的含义。

  •  int ferror(FILE* stream):

    •  作用:测试文件的上一次操作是否出错了,出错了返回1
  •  int feof(FILE*stream):

    •  作用:测试文件读写是否到达文件末尾,到达文件末尾返回1

四、fseek

int fseek(FILE *stream, long offset, int whence);

 作用:跳转文件的读写位置。

  • FILE *stream:要操作的文件流指针
  • long offset:偏移量(负数表示向前偏移,整数表示向后偏移,0不偏移)
  • int whence:表示从哪里开始偏移

 返回值:成功返回0,失败返回-1

什么是读写位置,为什么要跳转?

 如果往一个文件写数据,写完之后直接读取,你会发现什么也读不出来。因为文件有一个读写位置,你可以理解成一个指针,这个指针指向的是你文件操作的最末端,你从最末端读取自然读取不出来,因此读取前要把指针指向文件的开头,也就是把读写位置跳转到开头。

读写位置

whence选项:

  • SEEK_SET:起始位置
  • SEEK_CUR:当前读写位置
  • SEEK_END:末尾位置

注意:如果你想在追加写的时候跳转读写位置,比如说,想在文件的开头进行追加写,这样是不会成功的,因为追加写只会在文件末尾进行写入

 文件的写入是一种覆盖式写入,比如我将读写位置跳转到w字符处,然后写入123,这样wor三个字符会被覆盖。

覆盖写入

五、fclose

int fclose(FILE *stream);

 作用:关闭文件

  • FILE *stream:要关闭的文件的文件流指针

 返回值:成功返回0,失败返回-1

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值