问题描述
我在其中读音字创建线程这样的多线程应用程序
i have multi thread application in which i m creating thread like this
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]);
}
}
现在线程函数
我要重定向标准错误和放大器;标准输出在一个单独的文件中为每一个线程
somethig像线程的日志文件
somethig like thread log file
我怎么可以这样做?
编辑:
如果线程特定的打印可以显示不同的终端上..?我的意思是如果有2个线程然后将其打开2终端放大器;打印不同的终端上的每个线程数据
if thread specific prints can be displayed on different terminal..? i mean if there are 2 thread then it open 2 terminal & prints each threads data on different terminal
推荐答案
如果您真的必须这样做...
If you really must do this...
首先,你需要创建2 pthread_key_t
S,一个是标准输出
和一个标准错误
。这些可以使用 pthread_key_create
创建,并且必须从所有线程accessable。我们姑且称之为 stdout_key
和 stderr_key
。
First you need to create 2 pthread_key_t
s, one for stdout
and one for stderr
. These can be created using pthread_key_create
, and they must be accessable from all threads. Let's call them stdout_key
and stderr_key
.
当创建一个线程:
FILE *err = ..., *out = ...;
pthread_setspecific(stdout_key, out);
pthread_setspecific(stderr_key, err);
,然后在你的头文件:
and then in your header file:
#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");
我不推荐,虽然这种做法。
I don't recommend this approach though.
这篇关于在多线程应用程序如何可以重定向标准错误和放大器;在单独的文件标准输出为每线程?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!