在读写文件时,犯什么错误。这是很常见的,今天咱们就来看看C语言是如何处理这些文件读写错误的。

int feof ( FILE * stream );

这个API的作用是检查文件的EOF(end-of-file)指示符是否有效。如果,返回值是一个非零值,则EOF有效。

这个EOF指示符的有效,通常是由于前一次操作访问了文件末尾或者更往后的内存空间。

这里有一点需要注意,虽然文件的读写指针可能已经指向了文件末尾,但是,只要用户不去访问它,EOF指示符就是无效的。

EOF指示符可以被clearerr, rewind, fseek, fsetpos, freopen这些API清楚。当下一次访问出错时,EOF会被自动设置为有效。

int ferror ( FILE * stream );

这个API的作用是检查stream的错误指示符是否有效,如果有效,就返回一个非零的返回值。

错误指示符通常是由于上一次文件错做失败而导致被设置成有效的。

通过调用 clearerr, rewind, freopen就可以将其无效化。

void clearerr ( FILE * stream );

这个API的作用是将 EOF指示符 和 错误指示符 无效化。

当然了,上面也提到了,rewind, fseek, fsetpos, freopen也有可以做到同样的事情。

void perror ( const char * str );

这个API可以打印错误信息。过程就是,先把解析errno,生成一个描述信息字符串,然后再把参数中的字符串接在后面,生成一条完整的错误信息字符串,并输出到stderr中。

errno其实是一个整形变量,它的值代表了错误发生的条件和一些诊断信息。不同的编译器和操作系统对它的值的定义会有少许的不同,大家可以参考对应的文档。但是,一些比较小的值,在不同环境下,还是可以通用的,比如1~20.

perror应该在错误发生后,立刻被调用,不然的话,有可能被后续发生的错误覆盖。

示例代码

#include int main (){  FILE * pFile;  pFile=fopen ("unexist.ent","rb");  if (pFile==NULL)    perror ("The following error occurred");  else    fclose (pFile);  return 0;}
#include int main (){  FILE * pFile;  pFile = fopen("myfile.txt","r");  if (pFile==NULL) perror ("Error opening file");  else {    fputc ('x',pFile);    if (ferror (pFile)) {      printf ("Error Writing to myfile.txt");      clearerr (pFile);    }    fgetc (pFile);    if (!ferror (pFile))      printf ("No errors reading myfile.txt");     fclose (pFile);  }  return 0;}
#include int main (){  FILE * pFile;  int n = 0;  pFile = fopen ("myfile.txt","rb");  if (pFile==NULL) perror ("Error opening file");  else  {    while (fgetc(pFile) != EOF) {      ++n;    }    if (feof(pFile)) {      puts ("End-of-File reached.");      printf ("Total number of bytes read: %d", n);    }    else puts ("End-of-File was not reached.");    fclose (pFile);  }  return 0;}

这就是今天的内容,欢迎大家评论区讨论。

如果对大家有用的话,就请加转发+关注。

c语言eof_C语言 技能提升 系列文章(十)错误处理相关推荐

  1. c语言file_C语言 技能提升 系列文章(七)格式化输入/输出

    当初大家入门学习C语言的时候,面对一个黑黑的命令行界面,仅有的交互方法只有printf/scanf这两个函数作为输入输出.但是,大家知道吗?这两个函数后面还有很多兄弟姐妹.那就是C语言的格式化输入输出 ...

  2. c语言 feof_C语言 技能提升 系列文章(六)文件操作

    C语言除了提供open()/ read()/ write()/ close() 这些基本的操作以外,还提供了下面几个非常有用的API. // 删除指定的文件int remove ( const cha ...

  3. c语言 结构体_C语言 技能提升 系列文章 (三)结构体

    今天,来跟大家聊一聊C语言中的结构体. 在C语言的各种数据类型中,结构体最特别,因为它是可以被程序员定义的,它的特点是非常的灵活. 定义 struct defined_name{ type_name ...

  4. 邮件黑名单系列文章十 : IP被UCEProtect列入黑名单

    邮件服务器黑名单分两种: 1. 第三方公开的DNSBL(域名系统黑名单,也称为DNSBL或DNS黑名单)如http://www.dnsbl.info/ ,一但你被该组织列入黑名单,会导致引用该黑名单的 ...

  5. 赛尔号对战c语言程序,赛尔号计算解析系列文章(第一期)

    (注意:为了方便起见,本文所讨论能力值,仅由种族值.个体.性格.学习力这4个基础值决定,默认等级为100级,不计算刻印.战队加成.称号.套装.魂印.年费加成.特训.道具加成.) 为了方便大家对数据进行 ...

  6. 从C语言的角度重构数据结构系列(十二)-C语言判断语法详解(ifswitch)

    前言 在这里给自己打个广告,需要的小伙伴请自行订阅. python快速学习实战应用系列课程 https://blog.csdn.net/wenyusuran/category_2239261.html ...

  7. c语言eof_C语言持续深耕

    1.指针和数组变量的区别 #include 输出: output:1580x7fff5ab94af50x7fff5ab94af50x7fff5ab94af50x7fff5ab94ae8 printf( ...

  8. DevOps组织IO专业人员新角色分析与技能提升

    最近在"Top 10 Trends Impacting Infrastructure & Operations for 2019"中Gartner指出,十大趋势之一是I&a ...

  9. 云原生存储系列文章(一):云原生应用的基石

    作者| 郡宝 阿里云技术专家 参与文末留言互动,即有机会获得赠书福利! 导读:存储服务支撑了应用的状态.数据的持久化,是计算机系统中的重要组成部分,也是所有应用得以运行的基础,其重要性不言而喻.在存储 ...

最新文章

  1. SAP HUM 拆包之后的HU号码依旧存在
  2. 《数学之美》第11章 如何确定网页和查询的相关性
  3. html5 div css 页签,div css 实现tabs标签的思路及示例代码
  4. HDU多校10 - 6886 Tic-Tac-Toe-Nim(尼姆博奕)
  5. 类继承和初始化类的执行顺序
  6. 重磅分享(二)——决策引擎实战部署
  7. mysql long varchar2_案例:Oracle数据库long查询结果转换为varchar2类型方法的操作步骤...
  8. S3C64xx设备树支持
  9. 机器人核心期刊及会议
  10. php- 秒的转换 (天 小时 分钟) (小时 分钟 )
  11. 离散型随机变量及其分布
  12. 2021-2027中国工业物联网通信产品市场现状及未来发展趋势
  13. centos 6.7 GRUB配置
  14. IOS —— Crash分析
  15. ACM常见问题之【三角形的外心】
  16. c++刷题_今日刷题(5)
  17. 工具及方法 - 项目管理工具ProjectLibre
  18. Android微信代码
  19. 魅族 鸿蒙系统,魅族宣布接入鸿蒙系统,但……
  20. 工业智能网关BL110应用之11:实现三菱 PLC FX3S 接入MQTT Client One云平台

热门文章

  1. PHP关联数组和哈希表(hash table) 未指定
  2. Inversion Sequence(csu 1555)
  3. 如何在dnn禁止复制的问题
  4. 怎么把video文件改成mp4_如何把视频转换成mp4格式?
  5. linux不识别ntfs分区,WinUbuntu下linux无法挂载NTFS格式分区问题的解决
  6. python里dir是什么意思_python中dir什么作用
  7. python 参数解析_python的函数对参数解析分析
  8. 查看git是否安装_Java程序员的必备Linux运维技能-安装git
  9. 漫步者煲耳机软件_它是苹果AirPods的“真香替身”——漫步者lolliPods开箱体验...
  10. 组态王浏览器java_1工程浏览器是组态王的集成开发环境在这里可以