在学习Linux程序设计时,看到了这么一句话:最初的UNIX和POSIX库中,在一个多线程程序里,默认情况下,只有一个errno变量供所有的线程共享。如果是这样的话,当在一个线程中准备获取刚才的错误码时,该变量很容易被另外一个线程中的函数调用改变。然后特意去查了下资料,总结了一下Linux下errno的资料,希望对你有所帮助。如果有什么错误问题请多多包涵并留言,一起学习进步。
首先,我们查看在Linux下errno的定义(bits/errno.h):
# ifndef __ASSEMBLER__
/* Function to get address of global `errno' variable. */
extern int *__errno_location (void) __THROW __attribute__ ((__const__));
# if !defined _LIBC || defined _LIBC_REENTRANT
/* When using threads, errno is a per-thread value. */
# define errno (*__errno_location ())
# endif
# endif /* !__ASSEMBLER__ */
#endif /* _ERRNO_H */
所以,在在没有定义__LIBC或者定义_LIBC_REENTRANT