我在尝试制定父进程和子进程的单独管道以单向方式运行时遇到了麻烦。即:父项的描述符和其子项的不同描述符。
以下是我所拥有的:
#include <sys/types.h>
int main(int argc, char *argv[]) {
int parent[2];
int child[2];
pid_t pid;
int num = 0;
pipe(parent);
pipe(child);
pid =fork();
if(pid > 0){ // do parent stuff
num = 5;
write(parent[1], &num, sizeof(num));
printf("Parent with pid %d sent value: %d\n", getpid(), num);
close(parent[1]);
}else{ // do child stuff
read(child[0], &num, sizeof(num));
printf("Child with pid %d received value: %d\n", getpid(), num);
close(child[0]);
exit(0);
}
return 0;
}
输出:
Parent with pid 31702 sent value: 5
我知道我应该在read()
和write()
命令之前的某个位置关闭一些描述符,但似乎无论我关闭子回应打印的是什么在父母可以write()
之前或我最终断了管道。我应该在哪里关闭描述符以单向成功使用这些管道?
答案 0 :(得分:1)
简而言之,那不是你应该如何处理管道。
管道的结尾为read 0
和write 1
。
在您的情况下,孩子正在阅读child[0]
,但没有人会通过child[1]
给孩子写信。父母将写信给parent[1]
。
尝试使用单个管道(将child[0]
更改为parent[0]
)。并确保删除您在相应流程中不会使用的目的