我在ubuntu和嵌入式linux(我们的项目芯片)上运行以下代码。但产出不同。为什么在嵌入式Linux上运行时线程errno为0?我怎样才能获得相同的输出? pthread_create()函数可以设置errno吗?
此外我使用fork()函数而不是pthread_create()函数。在这个例子中,我用ubuntu得到了相同的输出。 例如:
if (fork())
print_message_function("foo");
ubuntu的:
>>main errno: 2
>>thread errno: 2
嵌入linux:
>>main errno: 2
>>thread errno: 0
当使用fork()函数时,嵌入linux:
>>main errno: 2
>>thread errno: 2
#include <unistd.h> /* Symbolic Constants */
#include <sys/types.h> /* Primitive System Data Types */
#include <errno.h> /* Errors */
#include <stdio.h> /* Input/Output */
#include <stdlib.h> /* General Utilities */
#include <pthread.h> /* POSIX Threads */
#include <string.h> /* String handling */
#include <time.h>
typedef struct str_thdata
{
int thread_no;
char message[100];
} thdata;
int createError(char *str)
{
int retVal = 0;
if (NULL == fopen("YOK", "r"))
{
printf(">>%s errno: %d\n",str, errno);
retVal = -errno;
}
return retVal;
}
void print_message_function ( void *ptr )
{
int retVal;
thdata *data;
data = (thdata *) ptr;
retVal = createError("thread");
while(1)
;
pthread_exit(0);
}
int main()
{
int retVal = 0;
pthread_t thread1;
thdata data1;
data1.thread_no = 1;
strcpy(data1.message, "Hello!");
/*if (fork())
print_message_function("foo");
*/
pthread_create (&thread1, NULL, (void *) &print_message_function, (void *) &data1);
retVal = createError("main");
while(1)
{
}
pthread_join(thread1, NULL);
exit(0);
}
答案 0 :(得分:3)
pthread函数返回错误值,但不设置errno
。这可能是因为errno
在设计pthread时不是特定于线程的。
用法示例:
int err = pthread_create(...);
if(err) {
fprintf(stderr, "pthread_create: (%d)%s\n", err, strerror(err));
exit(EXIT_FAILURE);
}