关于标准输出的缓冲造成的死锁

qm_ch 2007-08-20 10:18:38
UNIX环境高级变成第2版众,例程8,9,10得到个结论说:

问题出在系统默认的标准I/O缓存机制上。当程序10被调用时,对标准输入的第一个fgets引起标准I / O库分配一个缓存,并选择缓存的类型。因为标准输入是个管道,所以isatty为假,于是标准I/O库由系统默认是全缓存的。对标准输出也有同样的处理。当add2从其标准输入读取而发生堵塞时,程序9从管道读时也发生堵塞,于是产生了死锁。

为什么add2堵塞了,程序9(应该是父进程吧)从管道度也发生了堵塞?

有没有人能更详细地说明一下?
...全文
98 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
qm_ch 2007-09-27
  • 打赏
  • 举报
回复
关于标准输入输出还是要慎用,呵呵,今天有人中奖了
cceczjxy 2007-09-27
  • 打赏
  • 举报
回复
这是程序自己的逻辑死锁.不管标准io的事情.
dai_weitao 2007-08-21
  • 打赏
  • 举报
回复
自己解决了.
qm_ch 2007-08-20
  • 打赏
  • 举报
回复
刚才看明白了,呵呵,标准io,有缓存(必须有较大的数据量的时候,add2才能读到数据),所以add2读不到数据,所以也写不了数据,这样,父进程也就读不了数据,就都停了

23,120

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧