linux管道产生和关闭的程序,如果子进程在阅读时不会从写入中关闭管道会发生什么?...

Whenever the child process wants to read from the pipe,it must first close the pipe’s side from writing.

如果进程 – 父进程或子进程 – 不打算使用管道的写端,则应该关闭该文件描述符.类似地,对于管道的读取端.系统将假定在任何进程打开写入结束时可能发生写入,即使唯一的此类进程是当前尝试从管道读取的进程,因此系统也不会报告EOF.此外,如果您溢出管道并且仍然存在读取结束打开的进程(即使该进程是尝试写入的进程),则写入将挂起,等待读取器为写入完成留出空间.

When I remove that line close(pipefd[1]); from the child’s process IF,I’m basically saying that “okay,the child can read from the pipe,but I’m allowing the parent to write to the pipe at the same time”?

没有;你说孩子可以写信给管道和父母.具有管道的写文件描述符的任何进程都可以写入管道.

If so,what would happen when the pipe is open for both reading and writing — no mutual exclusion?

从来没有任何相互排斥.管道写入描述符打开的任何进程都可以随时写入管道;内核确保两个并发写操作实际上是序列化的.打开管道读取描述符的任何进程都可以随时从管道读取;内核确保两个并发读操作获得不同的数据字节.

通过确保只有一个进程打开以进行写入并且只有一个进程打开以进行读取,确保单向使用管道.但是,这是一个编程决定.你可以有N个进程,写入结束打开,M进程读取结束打开(并且,思想消失,N组和M组进程之间可能存在共同的进程),并且它们都能够出乎意料地工作.但是你不可能很容易地预测在写入数据包之后将在何处读取数据包.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值