gpt4 book ai didi

c - 在多线程应用程序中,如何根据线程在单独的文件中重定向 stderr 和 stdout?

转载 作者:IT王子 更新时间:2023-10-29 00:54:17 28 4
gpt4 key购买 nike

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

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]);
}
}

现在在线程函数中,我想根据线程将 stderrstdout 重定向到一个单独的文件中。 类似于线程日志文件。

我该怎么做?

编辑:

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

最佳答案

如果您真的必须这样做...

首先您需要创建 2 个 pthread_key_t,一个用于 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");

不过我不推荐这种方法。

关于c - 在多线程应用程序中,如何根据线程在单独的文件中重定向 stderr 和 stdout?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7360391/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com