父母从管道读取 - 什么条件

时间:2014-03-20 12:18:19

标签: c unix pipe

我'有一个程序,孩子们发送管道消息:"你好"和" goodbay"。他们发送你好,然后在几秒钟内随机休息。醒来后,他们发送了#good;" goodbay"。 我的问题是,我想,父母只从管道读取一次,然后完成工作。我认为必须一次又一次检查管道......任何人都可以帮助我吗?

我的代码:

void child_work(int pipe)
{
    int tt;
    char mb[PIPE_BUF];

    snprintf(mb,PIPE_BUF,"Pid[%d]: Hello\n",getpid());
    if (-1 == TEMP_FAILURE_RETRY (write (pipe, mb, strlen(mb))))ERR ("write");

    for(tt=5;tt>0;tt=sleep(tt));

    snprintf(mb,PIPE_BUF,"Pid[%d]: Goodbye\n",getpid());
    if (TEMP_FAILURE_RETRY (write (pipe, mb, (strlen(mb)+1)))<0)ERR ("write");
    kill(getpid(),SIGTERM);
}

void parent_work(int pipe)
{
    char buffer[PIPE_BUF];  
    int result;

   do
{
    result=TEMP_FAILURE_RETRY(read(pipe, buffer,sizeof(buffer)));
    if(result<0)ERR("read");
    if(result>0)printf("%s\n", buffer); 

}while(result>0);

    while((TEMP_FAILURE_RETRY(wait(NULL)))>0);
}

1 个答案:

答案 0 :(得分:0)

buffer中设置的

while(..read(..buffer..)将在result = read(..buffer..的循环的下一次迭代中被覆盖。