如果一端先关闭另一端,Linux管道()会发生什么情况

如果一端先关闭另一端,Linux管道()会发生什么情况,linux,operating-system,pipe,Linux,Operating System,Pipe,我通过pipe()syscall执行进程间通信。子级写入管道的一端,父级读取管道的另一端 在开始读取之前,父对象将等待子对象完成。如果child以非零返回值退出,则表示child有错误。因此,parent只需关闭管道描述符,然后继续操作而不读取 你认为这在孩子成功完成学业的情况下有效吗。家长在读烟斗之前实际上是在给孩子收割?如果是,那么传输中的数据会发生什么变化?操作系统将负责安全到达父端的数据?父进程打开一个管道。PDT中的两个指针将指向管道。一个是写作,一个是阅读 无论何时使用fork创建子

我通过pipe()syscall执行进程间通信。子级写入管道的一端,父级读取管道的另一端

在开始读取之前,父对象将等待子对象完成。如果child以非零返回值退出,则表示child有错误。因此,parent只需关闭管道描述符,然后继续操作而不读取


你认为这在孩子成功完成学业的情况下有效吗。家长在读烟斗之前实际上是在给孩子收割?如果是,那么传输中的数据会发生什么变化?操作系统将负责安全到达父端的数据?

父进程打开一个管道。PDT中的两个指针将指向管道。一个是写作,一个是阅读

无论何时使用fork创建子进程,都会复制PDT。因此,子进程在PDT中将有自己的指针指向管道

首先,管道是空的,如果父进程尝试读取,它将阻塞。 您永远不会创建子进程。这将导致僵局

如果在读取之前关闭写入端,则不会出现死锁,但子进程将无法写入管道(请阅读上面的“为什么”)

因此,这应该是您的流程:

1. Parent process creates pipe
2. fork()
3. in parent process you close the writing end
4. in child process you close the reading end
5. read/write to pipe.