在多线程应用程序中,如何按线程将stderr&stdout重定向到单独的文件中?

我有一个多线程应用程序,在其中创建这样的线程:

int main(int argc,char *argv[])

{

pthread_t thread_id[argc-1];

int i;

struct parameter thread_data[argc-1];

int status;

for(i=0;i<argc-1;i++)

{

thread_data[i].ip_filename = argv[i+1];

strcpy (thread_data[i].op_filename,argv[i+1]);

strcat (thread_data[i].op_filename,".h264");

}

for(i=0;i<argc-1;i++)

{

pthread_create (&thread_id[i], NULL , &thread_function, &thread_data[i]);

}

}

现在在线程函数中, 类似于线程日志文件。

我该怎么办?

如果可以在其他终端上显示特定于线程的打印。我的意思是,如果有2个线程,那么它将打开2个终端并在不同的终端上打印每个线程的数据。

回答:

如果您 必须这样做…

首先,您需要创建2

pthread_key_ts,一个用于stdout,一个用于stderr。这些可以使用创建pthread_key_create,并且必须可以从所有线程访问。我们称它们为stdout_keystderr_key

创建线程时:

FILE *err = ..., *out = ...;

pthread_setspecific(stdout_key, out);

pthread_setspecific(stderr_key, err);

然后在您的头文件中:

#define stdout (FILE*)pthread_getspecific(stdout_key)

#define stderr (FILE*)pthread_getspecific(stderr_key)

#define printf(...) fprintf(stdout, ##__VA_ARGS__)

然后只需使用:

fprintf(stderr, "hello\n");

fprintf(stdout, "hello\n");

printf("hello\n");

我不推荐这种方法。

以上是 在多线程应用程序中,如何按线程将stderr&stdout重定向到单独的文件中? 的全部内容, 来源链接: utcz.com/qa/408837.html

回到顶部