本文介绍了在多线程应用程序如何可以重定向标准错误和放大器;在单独的文件标准输出为每线程?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在其中读音字创建线程这样的多线程应用程序

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_ts, 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.

这篇关于在多线程应用程序如何可以重定向标准错误和放大器;在单独的文件标准输出为每线程?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

11-02 16:09