【问题标题】:Use a pipe in a thread function在线程函数中使用管道
【发布时间】:2012-11-27 12:22:11
【问题描述】:

我必须做一个包含两个线程的函数。一个必须读取一个管道,另一个必须写入另一个管道。但我不知道如何将管道传递给线程函数,因为在 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 相关的东西都很陌生。

【问题讨论】:

    标签: c


    【解决方案1】:

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

    struct readData
    {
        Job *job;
        int  fd;
    };
    
    ...
    
    struct readData readData;
    
    readData.job = job;
    readData.fd  = pipeFd;
    
    pthread_create(&pid1, NULL, readFather, &readData);
    

    【讨论】:

    • 但是如果我把管道描述符放在结构中,它仍然在管道中写入和读取数据?
    • 文件描述符只是整数,所以是的,如果你有相同的整数,你可以在另一个线程中使用它们。
    猜你喜欢
    • 2020-02-16
    • 2023-04-03
    • 2021-09-13
    • 1970-01-01
    • 1970-01-01
    • 2012-08-16
    • 1970-01-01
    • 1970-01-01
    • 2020-09-01
    相关资源
    最近更新 更多