当前位置: 首页 > 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.cnnetsun.cn/news/3041267.html

相关文章:

  • 3步掌握unveilr:2025年小程序反编译完全指南
  • 企业做GEO优化到底在优化什么?拆解AI搜索推荐的底层机制
  • 从复杂配置到直观操作:OCAT如何重塑OpenCore管理体验
  • 3个技术突破让unveilr成为2025年最实用的小程序反编译工具
  • Obsidian Pandoc插件:如何实现Markdown笔记的20+格式一键转换
  • 实战指南:如何用EasyOCR从复杂背景中精准提取多语言文本区域
  • centos官方镜像源(`mirrorlist.centos.org`)已经彻底关闭,无法访问
  • 鹤壁宴席烟酒备,不浪费又体面
  • 2026闭眼入!5款AI论文工具实测,告别卡壳症,初稿思路秒打通!
  • BUUCTF 隐写术实战:从图片中剥离隐藏的Flag
  • 如何通过NVIDIA Profile Inspector解锁显卡隐藏性能:免费开源工具终极指南
  • IDEA创建Spring Boot项目卡在Generating…?99%开发者忽略的4个网络/代理/缓存致命细节(附JDK17+Spring 3.2兼容清单)
  • 终极指南:如何免费下载Steam创意工坊模组无需Steam账号
  • 从服务配置到设备接管:详解虚拟机调用PC内置麦克风与声卡的全链路实践
  • 终极指南:如何用MelonLoader解锁Unity游戏的无限可能
  • YOLO26 架构解析:新一代实时目标检测核心技术
  • MySQL(十四):事务隔离与 MVCC 原理
  • 实战剖析——Cobalt Strike钓鱼攻击链的构建与防御思考
  • DeepBump:从单张图片智能生成法线贴图与高度图的AI工具
  • 解锁开源工具:OpenCore Legacy Patcher重塑老旧Mac的终极指南
  • Cursor Free VIP终极指南:三步轻松解除AI编程助手试用限制
  • CVE-2023-22527漏洞深度剖析:Confluence OGNL注入与远程代码执行实战
  • 构建AI模型:Excel驱动的深度学习模块化解析
  • 深度解密WeChatMsg:如何将微信聊天数据转化为个人数字资产
  • 2026年企业展厅设计的价值重构:从“空间装饰”到“品牌叙事引擎”
  • 3步高效实现老Mac硬件兼容性升级:OpenCore Legacy Patcher专业指南
  • (第7讲)支持完整RTSP流媒体服务器大全
  • 从单体到微服务,IDEA项目重构血泪史:17个真实踩坑案例(含Spring Cloud Config加密配置丢失、Eureka Zone感知错配等生产事故溯源)
  • WinBtrfs终极实战指南:3种配置方案解锁Windows Btrfs文件系统完整功能
  • IDEA中Spring Boot多模块启动总报NoSuchBeanDefinitionException?:基于Spring Boot 3.2源码级诊断的4类元数据加载失效根因分析