You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

向pipe写入1字节并读取后,再次读取会阻塞还是返回0

阻塞模式下空Pipe二次读取行为结果

在你描述的场景下,进程1的第二次读取操作会再次进入阻塞状态,不会直接返回0,直到持有该Pipe写端的进程再次写入数据,或者所有写端被关闭。

阻塞模式下对Pipe执行read()调用的返回逻辑遵循两个明确规则:

  1. 若Pipe不为空:读取对应长度的字节,返回实际读取到的字节数
  2. 若Pipe为空:
    • 仍有任意进程持有该Pipe的写端:调用阻塞,等待新数据写入
    • 所有进程都已关闭该Pipe的写端:直接返回0,表示管道已到结束位置

对应你给出的操作流程分析如下:

  • 步骤4完成后,Pipe中仅有的1字节已经被进程1读取完毕,Pipe回到空状态
  • 此时向Pipe写入数据的另一个进程仍然持有该Pipe的可写端,没有主动关闭,因此不符合返回0的触发条件
  • 因此进程1的第二次读操作会进入阻塞,等待新的写入数据

边界场景补充

如果步骤4执行完成后,写入数据的进程主动关闭了自己持有的Pipe写端,此时该Pipe没有任何活跃写端,那么进程1的第二次读操作才会直接返回0。

内容的提问来源于stack exchange,提问作者African_king

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 21:27:04