在线程函数中使用管道

时间:2012-11-27 04:18:20

标签: c

我必须做一个包含两个线程的函数。一个必须读取一个管道,另一个必须写入另一个管道。但我不知道如何通过线程函数传递管道,因为有另一个结构必须进入pthread_create的参数部分。 如果用这种方式更清楚的话,我会放一些代码。

void *readFather(Job *job){
    write (desc1Pipe[0],job->in, job->size_in);
}

void *writeFather(Job *job){
if ((job->size=read (desc2Pipe[1], job->out,  job->max_out) > job->max_out) 
    kill(job->pidhijo,SIGKILL);                        
}

这些是我给pthread_create的函数。

这是线程的调用。

pthread_t pid1; 
pthread_t pid2;
...
pthread_create(&pid1, NULL, readFather, &job);      
pthread_create(&pid2, NULL, writeFather, &job);

请帮助我,我已经完成了所有我能想到的,我对所有与C相关的东西都是新手。

1 个答案:

答案 0 :(得分:2)

如果您有多个数据,可以将它们包装在结构中。

struct readData
{
    Job *job;
    int  fd;
};

...

struct readData readData;

readData.job = job;
readData.fd  = pipeFd;

pthread_create(&pid1, NULL, readFather, &readData);