Linux环境进程间通信:管道及有名管道(3)
来源:互联网
时间:2026-02-26 18:16:00
作者:
系统大全为您提供 2.2有名管道的创建 #include #include int mkfifo(const char * pathname, mode_t mode) 该函数的第一个参数是一个普通的路径名,也就是创建后FIFO的名字。第二个参数与打开普通文件的open()函数中的mode 参数相同。如果mkfifo的第一个参数是一个已经存在的路径名时,会返回EEXIST错误,所以一般典型的调用代码首先会检查是否返回该错误,如果确实返回该错误,那么只要调用打开FIFO的函数就可以了。一般文件的I/O函数都可以用于FIFO,如close、read、write等等。 2.3有名管道的打开规则 有名管道比管道多了一个打开操作:open。 FIFO的打开规则: 如果当前打开操作是为读而打开FIFO时,若已经有相应进程为写而打开该FIFO,则当前打开操作将成功返回;否则,可能阻塞直到有相应进程为写而打开该FIFO(当前打开操作设置了阻塞标志);或者,成功返回(当前打开操作没有设置阻塞标志)。 如果当前打开操作是为写而打开FIFO时,如果已经有相应进程为读而打开该FIFO,则当前打开操作将成功返回;否则,可能阻塞直到有相应进程为读而打开该FIFO(当前打开操作设置了阻塞标志);或者,返回ENXIO错误(当前打开操作没有设置阻塞标志)。 对打开规则的验证参见附2。 2.4有名管道的读写规则 从FIFO中读取数据: 约定:如果一个进程为了从FIFO中读取数据而阻塞打开FIFO,那么称该进程内的读操作为设置了阻塞标志的读操作。 如果有进程写打开FIFO,且当前FIFO内没有数据,则对于设置了阻塞标志的读操作来说,将一直阻塞。对于没有设置阻塞标志读操作来说则返回-1,当前errno值为EAGAIN,提醒以后再试。 对于设置了阻塞标志的读操作说,造成阻塞的原因有两种:当前FIFO内有数据,但有其它进程在读这些数据;另外就是FIFO内没有数据。解阻塞的原因则是FIFO中有新的数据写入,不论信写入数据量的大小,也不论读操作请求多少数据量。 读打开的阻塞标志只对本进程第一个读操作施加作用,如果本进程内有多个读操作序列,则在第一个读操作被唤醒并完成读操作后,其它将要执行的读操作将不再阻塞,即使在执行读操作时,FIFO中没有数据也一样(此时,读操作返回0)。 如果没有进程写打开FIFO,则设置了阻塞标志的读操作会阻塞。 注:如果FIFO中有数据,则设置了阻塞标志的读操作不会因为FIFO中的字节数小于请求读的字节数而阻塞,此时,读操作会返回FIFO中现有的数据量。 向FIFO中写入数据: 约定:如果一个进程为了向FIFO中写入数据而阻塞打开FIFO,那么称该进程内的写操作为设置了阻塞标志的写操作。 对于设置了阻塞标志的写操作: 当要写入的数据量不大于PIPE_BUF时,linux将保证写入的原子性。如果此时管道空闲缓冲区不足以容纳要写入的字节数,则进入睡眠,直到当缓冲区中能够容纳要写入的字节数时,才开始进行一次性写操作。 当要写入的数据量大于PIPE_BUF时,linux将不再保证写入的原子性。FIFO缓冲区一有空闲区域,写进程就会试图向管道写入数据,写操作在写完所有请求写的数据后返回。 对于没有设置阻塞标志的写操作: 当要写入的数据量大于PIPE_BUF时,linux将不再保证写入的原子性。在写满所有FIFO空闲缓冲区后,写操作返回。 以上就是系统大全给大家介绍的如何使的方法都有一定的了解了吧,好了,如果大家还想了解更多的资讯,那就赶紧点击系统大全官网吧。 本文来自系统大全https://www.herecours.com/d/file/efpub/2026/26-26/20260226180430569746
编辑推荐:
- Linux环境进程间通信:管道及有名管道(3)02-26
- Linux中断处理流程02-26
- Linux下Java、Maven、Tomcat的安装02-26
- linux外挂硬盘步骤02-26
- Linux内核设计与实现——内核同步02-26
- linux CentOS WEB服务器分区方案02-26
- linux下查看文件内容cat,more,less02-26
- linux网络基础之三层交换机与NAT地址转换笔记02-26
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- Linux中断处理流程
Linux中断处理流程
26-02-26 - Linux下Java、Maven、Tomcat的安装
Linux下Java、Maven、Tomcat的安装
26-02-26 - linux下安装jdktomcat并配置
linux下安装jdktomcat并配置
26-02-26 - Linux命令(2):ls命令
Linux命令(2):ls命令
26-02-26 - linux之虚拟机三种联网模式与远程登录管理
linux之虚拟机三种联网模式与远程登录管理
26-02-26 - Linux怎么样扩展XFS系统文件
Linux怎么样扩展XFS系统文件
26-02-26 - Linux解决文件删除了但磁盘可利用率没变
Linux解决文件删除了但磁盘可利用率没变
26-02-26 - 为Linux手动制作U盘启动及基本原理
为Linux手动制作U盘启动及基本原理
26-02-26 - Cygwin安装
Cygwin安装
26-02-26 - 如何在Linux下使用rsync进行数据备份
如何在Linux下使用rsync进行数据备份
26-02-26
