c语言的文件操作

1、int fseek(FILE *stream, long offset, int fromwhere) ;设置文件位置指针stream的位置。

  • 如果执行成功,stream将指向以fromwhere为基准,偏移offset(指针偏移量)个字节的位置,函数返回0。
  • 成功,返回0,失败返回-1,并设置error的值,可以用perror()函数输出错误。


2、char *fgets(char *buf, int bufsize, FILE *stream) ;从文件结构体指针stream中读取数据

每次读取一行。读取的数据保存在buf指向的字符数组中,每次最多读取bufsize-1个字符(第bufsize个字符赋'\0')

  • 如果文件中的该行,不足bufsize个字符,则读完该行就结束。
  • 如若该行(包括最后一个换行符)的字符数超过bufsize-1,则fgets只返回一个不完整的行,但是,缓冲区总是以NULL字符结尾,对fgets的下一次调用会继续读该行。
  • 函数成功将返回buf,失败或读到文件结尾返回NULL(NULL一般指'\0'或者0)
    (注意一下,为什么gets失败返回NULL?而不像别的文件操作失败一般返回EOF,只需要看一下该函数原型的返回值你就明白了,返回值是一个char *,NULL代表空指针,所以当然可以表示char*,但是EOF可以吗?EOF的值是-1,显然不行!)


3、 int fputs(const char *str, FILE *stream);将一个字符串写入指定的流,但不包括空字符NULL,NULL即标志字符串结束的'\0'(注意,可以包含空格,空格不是空字符!)

  • 至于为什么不包含NULL,从函数的实现可以很明显的看出来[1];逻辑上也很好理解,现在是往文件里面写字符,文件里面的字符可以有普通字符和回车,哪有什么NULL;
  • 如果成功,这个函数返回一个非负的值,否则,错误返回EOF。


4、int fgetc(FILE *stream);从文件指针stream指向的文件中读取一个字符

  • 读取一个字节后,文件内部位置指针后移一个字节
  • 返回值,是返回所读取的一个字节。如果读到文件末尾或者读取出错时返回EOF。(虽然返回一个字节,但返回值不为unsigned char的原因为,返回值要能表示-1(即为EOF)。)


5、int fputc (int c, FILE*fp);写字符文件函数fputc()

  • 当正确写入一个字符或一个字节的数据后,文件内部位置指针会自动后移一个字节的位置;
  • 返回值:在正常调用情况下,函数返回写入文件的字符的ASCII码值,出错时,返回EOF(-1),EOF是在头文件 stdio.h中定义的宏。


参考:

[1] C语言输入输出函数之 fputs(...)

[2] 通过文件操作的返回值可以很清楚的明白,为什么很多返回值为int的函数,以返回值0表示函数执行成功,以返回值-1表示失败?换个角度想一下,在文件操作中-1表示EOF,表示文件操作中文件位置指针到了文件尾或者文件操作失败,那么在其他的文件中也当然可以以-1表示函数操作失败,并且这样也达到了一定的统一;







  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值