多次分叉后写入管道不起作用
Posted
技术标签:
【中文标题】多次分叉后写入管道不起作用【英文标题】:Writing to a pipe is not working after many fork 【发布时间】:2014-01-28 05:42:23 【问题描述】:我有以下测试程序,我喜欢将数据从最深的孩子发送(写入)到父母。
代码是:
#define M1 "Message One"
int main(int argc, char **argv)
int f1[2];
char buff[32];
pipe(f1);
if (fork() == 0)
if (fork() == 0)
if (fork() == 0)
printf("%s :%d\n", "f1[0] :",f1[0]);
while(read(f1[0], buff, sizeof(buff)) > 0)
printf("%s\n", buff);
return 0;
else
//do nothing
else
//do nothing
else
sleep(2);
printf("%s :%d\n", "f1[1] :",f1[1]);
if(write(f1[1], M1, sizeof(M1) < 0))
printf("%s\n","Error");
return 0;
return 0;
我的代码的问题是,程序没有打印消息。
我不确定这是否与许多分叉有关。
【问题讨论】:
【参考方案1】:关闭未使用的文件描述符就可以正常工作了
在最里面的孩子
close(f1[1]);
在父进程中
close(f1[0]);
而且行中的语法错误也被称为将其更改为
write(f1[1], M1, sizeof(M1)) < 0)
【讨论】:
【参考方案2】:将您的 if
语句更改为
if (write(f1[1], M1, sizeof(M1)) < 0)
而不是
if(write(f1[1], M1, sizeof(M1) < 0))
【讨论】:
以上是关于多次分叉后写入管道不起作用的主要内容,如果未能解决你的问题,请参考以下文章