我有以下测试程序,我喜欢将最深层的数据发送(写入)给父母。
代码是:
#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;
}
我的代码存在的问题是,程序没有打印消息。
我不确定这是否与许多fork有关。
答案 0 :(得分:2)
关闭未使用的文件描述符,它将正常工作
在最内在的孩子
close(f1[1]);
在父流程中
close(f1[0]);
并且还会调用行写入中的语法错误将其更改为
write(f1[1], M1, sizeof(M1)) < 0)
答案 1 :(得分:1)
将您的if
声明更改为
if (write(f1[1], M1, sizeof(M1)) < 0)
而不是
if(write(f1[1], M1, sizeof(M1) < 0))