C pthreads函数是否在内部设置errno?
在下面的代码中,我调用线程id为self的pthread_join()。结果是它返回错误号35。所以我想和佩罗一起打印。但它正在展示“成功”。我的疑问是库/系统调用是否需要为任何错误明确设置errno,或者我是否遗漏了任何内容C pthreads函数是否在内部设置errno?,c,linux,pthreads,C,Linux,Pthreads,在下面的代码中,我调用线程id为self的pthread_join()。结果是它返回错误号35。所以我想和佩罗一起打印。但它正在展示“成功”。我的疑问是库/系统调用是否需要为任何错误明确设置errno,或者我是否遗漏了任何内容 #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <errno.h> #include <string.h> #include
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include <pthread.h>
#define DEATH(mess) { perror(mess); exit(errno); }
static void * threadFunc(void *arg)
{
void *res;
printf("sleeping for 2 sec ...\n");
sleep(2);
char *s = (char *) arg;
pthread_t t = pthread_self();
int relval = pthread_join(t, &res);
if (relval)
perror("deadlock");
printf("return value is %d .....\n",relval);
return (void *) strlen(s);
}
int main(int argc, char *argv[])
{
pthread_t t1;
void *res;
int ret;
ret = pthread_create(&t1, NULL, threadFunc, "Hello world\n");
if (ret != 0)
DEATH ("pthread_create");
printf("Message from main()\n");
pthread_exit(&res);
exit(EXIT_SUCCESS);
不要求SR函数设置
errno
,也不要求它们单独设置。您始终可以自由地执行以下操作:
errno = pthread_join(t, &res);
pthread\u join()未设置errno值
请参阅此处的讨论:
最好的办法是只使用pthread_join的返回值,然后做几件事
为什么不阅读手册页?这不是疑问,这是一个问题。还要注意,没有可靠的方法可以导致
pthread\u join
返回错误。它可能返回的唯一可能的错误涉及到调用未定义行为的情况,例如在线程生命周期结束后使用线程ID。谢谢--这使我意识到我也可以将其与perror
一起使用,因为(在我的系统上)所有pthread\u join
和pthread\u create
可能返回的代码都是peror
-EAGAIN
,ESRCH
等理解的标准代码(基于El Capitan OS X 10.11.3上的手册页)。不过,我不知道这是否是pthreads标准的一部分。
errno = pthread_join(t, &res);