在我的下面的工作程序中,我想了解,
如何/谁在 {child'spair[1]} 描述符和 {parent'spair[0]} 描述符之间建立(创建)单管道通信?
因为在我下面的程序中,我只是 fork() 了一个进程,并且立即谁在 {child'spair[1]} 描述符和 {parent'spair[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;
}
请帮助我!!
最佳答案
你的问题不是特别清楚;第二个“问题”说的是一些看起来很明显的事情,但似乎本身不包含任何问题。例如,您实际上并没有说明您提供的示例中出了什么问题(如果有的话)。
我认为您应该了解的内容可能如下:
pipe()
创建两个在操作系统中链接的文件描述符:读取器和写入器。当您
fork()
时,所有打开的 FD 在父级和子级中都可用。因此,如果您在fork()
之前调用了pipe()
,则读取器和写入器都可供子级使用。通常 parent 是读者, child 是作者,或者 parent 是作者, child 是读者(即两者都不会写和读),它父进程关闭一个 fd,子进程关闭另一个 fd 是正常的。
关于c - 父子进程两个描述符之间管道创建查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21984616/