1
如果我想使用可能返回錯誤的函數,例如thread_mutexattr_init(& myAttr),如果此函數返回一個錯誤,它將自動設置errno爲錯誤的編號,還是應該設置errno到這個函數的返回?瞭解C中的errno
例如什麼是正確的呢?
if((errno = pthread_mutexattr_init(&myAttr)) != 0){
if(errno == EBUSY){
perror("some error message because of EBUSY");
}else{
perror("another error message");
}
或者這樣:
if(pthread_mutexattr_init(&myAttr) < 0){
if(errno == EBUSY){
perror("some error message because of EBUSY");
}else{
perror("another error message");
}
}
雖然POSIX標準並沒有說pthread的功能從設置'errno'禁止的['errno']的定義(http://pubs.opengroup.org/onlinepubs/9699919799/functions/errno.html )說:errno'的'_The值應只對函數的調用,這就是它明確規定後,設置定義... _和[''(http://pubs.opengroup.org/onlinepubs/9699919799 /basedefs/errno.h.html)表示:_The''頭應定義下面的宏其中應擴展到整數類型'int'常量表達式,不同正值(除了下面指出的)... _ –
由於'pthread_mutexattr_init( )'沒有被定義爲設置'errno',所以在調用之後檢查'errno'是不允許的(明智的)。函數永遠不會返回負數:成功時返回0,失敗時返回正整數。 –