Understanding errno in C
如果我想使用可能返回错误的函数,例如thread_mutexattr_init(
第一个版本在两个版本中都是正确的(第二个版本实际上是错误的-成功时要求pthread_mutexattr_init()返回零或失败时返回正错误号;未定义设置errno,因此errno不一定相关)。
POSIX并不要求pthreads函数设置errno(它们可以设置也可以不设置-不需要)。返回值本身就是错误号。如果返回的值是0,则表示成功,如果返回的值是其他值,则可以将其分配给errno以查找错误(或使用其他任何int变量保存该值,然后将其传递给strerror(),例如例子)。
- 尽管POSIX标准没有说禁止pthread函数设置errno,但是errno的定义说:errno的值应仅在调用显式声明为该函数的函数之后定义。设置…,并且<errno.h>说:<errno.h>标头应定义以下宏,这些宏将扩展为类型为int且具有不同正值的整数常量表达式(以下所述除外)…
-
由于未定义pthread_mutexattr_init()来设置errno,因此不允许(明智的)在调用后检查errno。而且该函数从不返回负数:成功时返回0,失败时返回正整数。