errno的前世今生

当unix函数出错时,常常返回一个负值,而且整形变量errno通常被设置为含有附加信息的一个值。例如open函数如果成功,返回一个非负文件描述符。如果出错,则返回-1。在open出错时,有大约15种不同的errno值(文件不存在,权限问题等)。
某些函数并不返回负值而是使用另一种预定。例如,返回一个指向对象指针的大多数函数,在出错时,将返回一个空指针。
在<errno.h>中定义了errno以及可以赋予它的各种常量,这些常量都以字符E开头。在linux中,可以通过man 3 errno查看各种出错常量。


对于errno应当知道两条规则:
1、如果没有出错,则其值不会被一个例程清除。因此,仅当函数的返回值指明出错时,才检验其值。
2、任何一个函数都不会将errno值设置为0,在<errno.h>中定义的常量都不为0。

C定义了两个函数,帮助我们打印出错信息。
char* strerror(int errnum);
此函数将errnum(通常是errno的值)映射成一个出错字符串,并且返回此字符串的指针。

void perror(char* msg);
此函数首先输出msg指向的字符串,然后是一个冒号,一个空格,接着是对应errno值的出错信息,最后是一个换行符。


#include <errno.h>
#include <stdio.h>
#include <string.h>

int main(int argc, char* argv[])
{
    fprintf(stderr, "EACCES: %s\n", strerror(EACCES));

    errno = ENOENT;
    perror(argv[0]);
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值