Linux05(管道)

#技术笔记

1.管道

命名管道 是一种特殊的文件 ,又称FIFO,Linux 中用mkfifo name.pipe 命令来创建;本质只是一个数据流或缓冲区,管道允许一个进程的输出作为另一个进程的输入,是Linux系统中一种重要的实现进程间通信的机制;使用命名管道注意,必须读端写端同时打开,不然会阻塞。

管道的读空阻塞 ,和写满阻塞 ,这两个含义跟其命名一样,当管道无数据,读操作就会阻塞 ,管道数据满了,写就会阻塞;命名管道是一种半双工通信,一般一端写,另一端读,不是同时的。

在管道的操作中,如果写端关闭,读端可以继续从管道读数据,有剩余数据就读,没有数据就返回 0;如果读端关闭,写端继续写数据的话, 就会触发SIGPIPE信号,导致进程异常终止。所以一般用两个管道 构建两个进程的全双工通信。

2.I/O多路复用

操作系统允许单个进程或线程同时监视多个文件描述符的一种技术。select 是实现IO多路复用的一种方式,还有其他的 poll,epoll

select 就是同时检查多个文件描述符的一种技术,文件描述符可用,select就会阻塞,read(STDIN_FILENO,...) 当文件描述符 0 可用,即(STDIN_FILENO) 可用,其实就是键盘中有数据; 其最基本的原理就是把要监视的文件描述符构建成一个文件描述符的监听集合,这个集合交给 select ,slect 促成操作系统内核来轮询监听文件描述符这个集合,直到监听集合中至少有一个文件就绪,这样,这一次 slect 监听就结束了,并携带就绪的文件描述符集合返回。

相关推荐
Promise微笑17 小时前
2026电缆故障定位仪:缆故障定位仪精准选型与高效避坑指南
运维·人工智能·重构
爱喝水的鱼丶17 小时前
SAP-ABAP:新手入门篇——从0到1写出你的第一个ABAP Hello World程序并完成调试运行
运维·服务器·数据库·学习·sap·abap
杜子不疼.17 小时前
【 C++ AI 大模型接入 SDK】 - 日志模块
开发语言·javascript·c++
学术小李18 小时前
VSCode上传文件到服务器
服务器·vscode·sftp·数据上传
hweiyu0018 小时前
Linux命令:nmtui
linux
谙弆悕博士18 小时前
【附C源码】二叉搜索树的C语言实现
c语言·开发语言·数据结构·算法·二叉树·项目实战·数据结构与算法
MY_TEUCK18 小时前
【2026最新Linux虚拟机安装】Linux 虚拟机安装VMware 17 + CentOS 7
linux·运维·centos
C+++Python18 小时前
C++ 泛型编程 极简示例代码
开发语言·c++
Rust研习社18 小时前
Ubuntu 全面拥抱 Rust 后,我意识到 Rust 社区要变了
linux·服务器·开发语言·后端·ubuntu·rust
Shingmc318 小时前
【Linux】传输层协议TCP
linux·网络·tcp/ip