我'有一个程序,孩子们发送管道消息:"你好"和" 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);
}
答案 0 :(得分:0)
buffer
中设置的 while(..read(..buffer..)
将在result = read(..buffer..
的循环的下一次迭代中被覆盖。