关于errno头文件

看见网上很多地方都用到<errno.h>这个头文件,一直不理解,今天找了一些资料,可以方便自己理解


网上的说法是,系统调用的错误都会存放在errno中,我们还可以通过写代码测量出errno错误的总数。链接如下:

https://www.cnblogs.com/Jimmy1988/p/7485133.html

errno是一个宏,它定义在对应的头文件里面,这个在上面的链接里也有说到

errno是一个全局变量,它保存了最近一次的错误。

我常看见的一个代码是:

errno != EEXIST

EEXIST的中文翻译是错误已经存在

也就是说,最近一次系统调用的错误已经存在,可以用来做为判断条件

百度知道上有一个很好的例子:


EEXIST 是个宏定义,是Error EXIST 的缩写,EXIST 是“存在”的意思。


errno是个全局变量,在errno.h头文件中定义,用于保存错误码,方便根据错误码来查询出错原因。

这个mkfifo函数创建管道时,如果有已存在的同名管道,就会将errno赋值为EEXIST。

erron != EEXIST,也就是判断mkfifo函数是否出现“已存在同名管道”的错误。

if((mkfifo(FIFO_SERVER,O_CREAT|O_EXCL|O_RDWR)<0)&&(errno!=EEXIST))
这段代码翻译成汉字描述就是:
如果((mkfifo函数创建管道,返回值小于0),并且,(错误原因不是 “已存在同名管道”))
链接:https://zhidao.baidu.com/question/1430216797624616619.html
上面更详细的解说是,如果我们用mkfifo()函数创建一个有名管道发生错误(发生错误返回值小于0),但是这个错误不是因为这个管道文件已经存在(有名管道存在再去创建是会出现失败的),而是因为其他原因,这个时候就可以把判断条件写成

errno != EEXIST,它代表这个错误(管道文件)是不存在的,是一个新的错误,当然,这个新的错误会存放在errno中,因为上面说过,errno是保存最近一次的错误。


猜你喜欢

转载自blog.csdn.net/tiramisu_l/article/details/80244282