当前位置: 首页 > news >正文

Linux 有名管道阻塞非阻塞

一、文件打开(open)行为分析

当进程针对 FIFO 类型文件发起open调用时,内核根据是否携带O_NONBLOCK标志,表现出不同的同步语义。

1. 默认阻塞模式(未指定O_NONBLOCK
  • 先打开读端:调用导致进程挂起(进入休眠),直至另一个进程以写方式打开该管道。

  • 先打开写端:调用导致进程挂起,直至另一个进程以读方式打开该管道。

  • 写端曾经打开但已关闭,读操作会读取剩余数据,读完后返回0(不阻塞)。

  • 并发打开:若读端与写端在不同进程中同时打开,双方同时被唤醒,通信链路建立。

  • 单进程死锁风险同一进程在阻塞模式下,无论是先开读端还是先开写端,单进程都会百分百自锁,则第一次open将永久阻塞自身,第二次open无法执行,形成典型自死锁场景。

2. 非阻塞模式(指定O_NONBLOCK
  • 先打开读端:立即成功返回,不受写端是否存在的影响。

  • 先打开写端:立即返回错误,errno被重置。POSIX 标准强制此行为,旨在贯彻“及早失败”原则——若无读端存在,写端写入的数据将无处可去,应在打开阶段即拒绝,避免后续问题。

二、数据读取(read)行为分析

read() 是否阻塞,完全取决于它操作的那个文件描述符(fd)本身是否被标记为“非阻塞”。所以,设置 read 非阻塞,本质上是设置文件描述符的属性。

管道瞬时状态非阻塞模式下的read返回值阻塞模式下的read返回值语义说明
所有写端均已关闭0(立即返回)0(立即返回)通用规则:数据流终结,无论哪种模式,都立即返回 EOF。
写端存在但缓冲区为空-1errno=EAGAIN进程挂起(休眠),不返回核心分水岭:非阻塞告诉你“暂时没有”;阻塞则直接“睡着等”,直到有数据才醒来。
写端存在且缓冲区有数据实际字节数实际字节数通用规则:有数据就读,立即返回字节数,模式不影响。
发生其他系统错误-1(其他 errno)-1(其他 errno)通用规则:需根据具体错误码进行异常处理。
http://www.jsqmd.com/news/1084916/

相关文章:

  • 3分钟快速上手:ipatool终极指南 - 免费获取iOS应用IPA文件的命令行神器
  • 网盘下载新革命:如何用开源脚本让九大网盘文件下载速度提升5倍?
  • Arduino串口通信实战指南——从基础API到数据流高效处理
  • YimMenu深度解析:构建GTA5最强防护型辅助工具的完整指南
  • 如何快速掌握高效窗口管理:RBTray系统托盘最小化终极实用指南
  • 揭秘AI数字人获客首选背后的乱象:为什么‘全国首选’往往让你亏得最惨?
  • 解密AMD显卡驱动精简革命:Radeon Software Slimmer如何重塑你的游戏体验
  • Flow Launcher完整指南:如何用免费开源工具3倍提升Windows效率
  • 网盘直链下载助手终极指南:免费开源工具让你轻松突破下载限制
  • 02 | Raylib渲染架构
  • Switch手柄PC适配神器BetterJoy:5分钟上手完整指南
  • 深度解析unveilr:2025年高效小程序反编译解决方案
  • OpenCV实战:从基础阈值到智能分割,详解五大图像分割算法与应用
  • 如何用 dupeguru 终极指南:快速释放硬盘空间的重复文件查找工具
  • 深度解析:如何为老旧安卓设备构建高性能电视直播应用架构
  • 揭秘Il2CppDumper:Unity手游逆向工程的核心引擎深度解析
  • 如何让老旧安卓电视流畅看直播?MyTV-Android轻量级解决方案揭秘
  • PhotoGIMP终极指南:3步让GIMP界面和Photoshop一模一样
  • 如何用SMU Debug Tool终极优化AMD Ryzen处理器性能:完整调试指南
  • 070、NumPy 实战:用 NumPy 从零实现一个简单的神经网络前向传播
  • 爽翻!只需输入需求,这几款AI论文写作工具自动生成毕业论文初稿!
  • 华为EC6109系列盒子免拆焕新:海思HI3798mv200芯片通刷当贝桌面精简固件指南
  • AMD Ryzen SDT调试工具终极指南:5分钟解锁CPU隐藏性能的免费秘籍
  • GanttProject项目管理三大挑战破解指南:从混乱到高效
  • Windows右键菜单整理5步法:用ContextMenuManager打造高效工作流
  • 如何用OpenRGB统一管理所有RGB设备:告别多软件混乱的终极指南
  • MOE混合专家模型
  • ArcGIS渔网创建实战:从投影转换到精准裁剪的完整避坑指南
  • 四旋翼轨迹跟踪PID-ADRC位置+姿态轨迹跟踪、四旋翼动力学模(自抗扰ADRC与传统PID对比)
  • Obsidian Pandoc插件:打造无缝文档转换的终极解决方案