在中errno.h,此变量被声明为extern int errno;是我的问题,errno在某些调用之后检查值还是在多线程代码中使用perror()是安全的。这是线程安全变量吗?如果没有,那还有什么选择呢?
我在x86体系结构上将Linux与gcc一起使用。
慕仙森
浏览 832回答 3
3回答
开心每一天1111
是Errno不再是一个简单的变量,它是幕后复杂的事情,特别是它具有线程安全性。见$ man 3 errno:ERRNO(3) Linux Programmer’s Manual ERRNO(3)NAME errno - number of last errorSYNOPSIS #include <errno.h>DESCRIPTION ... errno is defined by the ISO C standard to be a modifiable lvalue of type int, and must not be explicitly declared; errno may be a macro. errno is thread-local; setting it in one thread does not affect its value in any other thread.我们可以仔细检查:$ cat > test.c#include <errno.h>f() { g(errno); }$ cc -E test.c | grep ^ff() { g((*__errno_location ())); }$