进程间通信 - 有名管道
1.有名管道的特点
- 有一个具体的管道文件,这个文件有路径有名字,任何进程都可以通过路径加名字通过open()打开来访问管道,所以有名管道可以用于任意进程之间通信。
- 有名管道文件类型为p。
- 进程打开管道文件的方式:只读(进程为管道的读端)、只写(进程为写端)、可读可写(进程即时读端也是写端),不同的方式打开管道文件open()函数返回不同的文件描述符。
- 通过文件io操作,但实际的写入内容还是存放于内存中,不是存放在存在于硬盘的管道文件中。
- 当所有的读端和写端都关闭管道文件的时候,内存中的数据就会被释放。
Linux下七种文件类型
| 文件类型标识 | 文件类型 |
|---|---|
| - | 普通文件 |
| d | 目录 |
| l | 符号链接 |
| s(伪文件) | 套接字 |
| b(伪文件) | 块设备 |
| c(伪文件) | 字符设备 |
| p(伪文件) | 管道 |
2.有名管道的创建
1 |
|
两个进程读写一个有名管道示例:
写管道进程:
1 |
|
读管道进程:
1 |
|
运行结果:

小结:有名管道可以跨任意进程通信,有名管道所有写端都关闭时并且管道中没有数据了,再读管道read()会返回0。
在读管道的时候,如果管道中的数据小于预期要读的数据字节数,read()返回管道中的实际存在数据的字节数。
有名管道的数据依然是存放在内存中,硬盘中的文件系统文件是用来打开有名管道用的。
当只有读端或者只有写端的时候,进程打开open()管道会被阻塞。当管道写端和读端都存在了,读端和写端的open()才会返回。
- 本文作者: 龙兄嵌入式
- 本文链接: https://hexo.880755.xyz/1970/01/01/zblog/download/43.Unix进程间通信 - 有名管道/