在我的下面的工作计划中,我想了解,
如何/谁建立(创建){child's#pair [1]}描述符和{parent&#39s对[0]}描述符之间的单个管道通信?
因为在我的下面的程序中,我只是fork()' da进程并且立即在{child'对[1]}描述符和{parent'对[0]之间建立了管道连接描述符?你觉得接受这一点是否明显?
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/types.h>
#include <unistd.h>
int main(void)
{
int pair[2];
char buf[30] ="";
pipe(pair);
if (!fork()) {
printf(" CHILD: writing to the pipe\n");
write(pair[1], "test", 5);
printf(" CHILD: exiting\n");
exit(0);
} else {
printf("PARENT: reading from pipe\n");
read(pair[0], buf, 5);
wait(NULL);
printf(" PARENT: exiting\n");
}
return 0;
}
请帮助我!!
答案 0 :(得分:2)
你的问题不是特别清楚;第二个“问题”说明看起来很明显,但似乎本身并没有问题。例如,您实际上没有说明您提交的样本中出现了什么问题(如果有的话)。
我认为您应该知道的内容如下:
pipe()
创建两个文件描述符,这些描述符在操作系统,读者和作者中链接。
当您fork()
父母和孩子都有可用的所有开放FD时。因此,如果您在pipe()
之前致电fork()
,那么读者和作者都将可供孩子使用。
通常父母将是读者,孩子是作家,或父母将是作家,孩子是读者(即既不会写也不会),它父母关闭一个fd和孩子关闭另一个是正常的。