[Linux]出错处理errno

概述

公共头文件<errno.h>定义了一个整型值errno以及可以赋予它的各种常量。

大部分函数出错后返回-1,并且自动给errno赋予当前发生的错误枚举值。

需要注意的一点是,errno只有在错误发生时才会被复写,这就意味着如果按顺序执行AB两个函数,如果只有A函数出错,则执行完AB函数后errno依然保留着A函数出错的枚举值,

如果AB均出错,那么在B之前如果errno没有被处理,那么将会被B出错的枚举值所覆盖。

 

Linux

为了避免多线程环境共享一个errno,Linux系统定义了一个宏来解决这个问题,这个定义已经定义在<errno.h>系统头文件中。

extern int *__errno_location(void);
#define errno (*__errno_location())

最让人疑惑的是,你可以为此宏赋值,具体解析可以参考这个文章

 

int main(void)
{
    errno = 1;
    perror("");
    errno = 2;
    perror("");
    return 0;
}

 

 

 

示例

#include <error.h>
#include <unistd.h>
#include <stdio.h>
#include <fcntl.h>

/*Already define in <error.h>*/ /*extern int *__errno_location(void); #define errno (*__errno_location())*/ char buf[500000]; int main(void) { int re, my_errno; re = read(90, buf, sizeof(buf)); if(re > -1){ my_errno = 0; }else{ my_errno = errno; perror("file error"); } printf("%d\n", my_errno); re = 0; re = open("./not_exists_file", O_RDONLY); if(re > -1){ my_errno = 0; }else{ my_errno = errno; perror("file error"); } printf("%d\n", my_errno); return 0; }

以上代码输出:

file error: Bad file descriptor
9
file error: No such file or directory
2

 

转载于:https://www.cnblogs.com/yiyide266/p/10627392.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值