调用库函数之后检查errno《C专家编程》
来源:互联网 发布:如何设置淘宝客优惠券 编辑:程序博客网 时间:2024/04/30 09:28
errno系统中的全局变量为int类型,用来记录系统的最后一次错误代码。
只有在库函数调用失败时,errno才会被赋值,当函数成功运行时,errno的值不会被修改。
因此,在使用库函数调用之前,若没有先把errno置为0,
则在调用之后用它来判断是不正确的,因为errno《0可能在系统调用之前就已经标志为错误了。
——————————————————————————————————————————
同时若用errno来检查错误时,一般不写如下的代码:
if(errno).........if(errno<0).......
在库函数调用中,只有在函数调用返回错误了,
然后才在错误处理中通过if(xxxx==errno)的方式来查看错误类型。
因为,fopen()函数,在成功返回时,也可能把errno设置成<0,因为,
若之前的文件不存在,则相当于找不到这个文件,
从而内部的实现会把errno设置成某个值,但不会库函数调用出错返回。而是新建一个文件。
#include<fcntl.h>#include<io.h>//,,,,,,,,,,,,,errno=0int fd=open("xer.txt",O_RDWR|O_CREAT,"r");if(fd<0){cout<<"fd<0:"<<endl;perror("xer.txt");cout<<"errno="<<errno<<endl;}else{cout<<"errno="<<errno<<endl;perror("xer.txt");//为了显示errno值。}
会正确执行,但是errno==22;
所以若在open之后马上调用if(errno)则进入了错误处理。:
#define EIO 5 /* I/O error */
#define ENXIO 6 /* No such device or address */
#define E2BIG 7 /* Argument list too long */
#define ENOEXEC 8 /* Exec format error */
#define EBADF 9 /* Bad file number */
#define ECHILD 10 /* No child processes */
#define EAGAIN 11 /* Try again */
#define ENOMEM 12 /* Out of memory */
#define EACCES 13 /* Permission denied */
#define EFAULT 14 /* Bad address */
#define ENOTBLK 15 /* Block device required */
#define EBUSY 16 /* Device or resource busy */
#define EEXIST 17 /* File exists */
#define EXDEV 18 /* Cross-device link */
#define ENODEV 19 /* No such device */
#define ENOTDIR 20 /* Not a directory */
#define EISDIR 21 /* Is a directory */
#define EINVAL 22 /* Invalid argument */
#define ENFILE 23 /* File table overflow */
- 调用库函数之后检查errno《C专家编程》
- 文件编程(库函数调用)
- .调用标准C库函数
- 汇编调用C库函数
- 《C专家编程》勘误表
- c专家编程
- 【读书笔记】c专家编程
- C编程专家读后感
- 《C专家编程》读书笔记
- C专家编程 笔记
- c专家编程笔记
- c专家编程笔记
- 重读C专家编程
- 《C专家编程》读书笔记
- C 专家编程
- c专家编程学习
- C专家编程
- C专家编程 读书笔记
- js 创建链表
- Oracle 命令行创建表空间、用户,授予表空间、授予dba权限,导入/导出dmp数据文件
- Ubuntu下 的sda*
- android中修改framework层代码后怎样操作才能看到修改后的效果?
- Spark 学习总结(学习资料一)
- 调用库函数之后检查errno《C专家编程》
- 怎么在数据库表里面自动插入日期字段
- 原创文章3
- C++11 新特性<一>
- python打印列表中的内容,而不是unicode字符
- 枚举类型
- Tomcat7新特性?cookie HttpOnly的那些事(sessionid获取麻烦了)
- 创建一个有序链表
- 已知一个函数rand7()能够生成1-7的随机数,请给出一个函数rand10(),该函数能够生成1-10的随机数。