中进程间通信方式中,有一种为无名管道。对管道的读写操作需要注意以下的使用规则:
1、当读的时候:
(1) 有写端,至少有一个进程,有写端存在
有数据:使用read可以读到pipe中的数据,返回实际读取的字节数
无数据:阻塞,等待其他进程向管道写入数据。
(2) 无写端,所有进程,写端都关闭了。
有数据:使用read可以读到pipe中的数据,返回实际读取的字节数
无数据:无写端意味着所有的写描述符关闭了,不会向管道中写入数据了,会立刻返回0.
2、 当写的时候:
(1) 有读端,至少有一个进程,读端存在。
有空间:可使用write向管道中写入内容,返回实际写入的字节数。
空间不足:有多少写多少,没写完的阻塞等待,直到其他进程将管道中数据读走,才继续写入数据。可写一个程序来测试无名管道的大小。(64K)
(2) 无读端,所有进程,写端都关闭了。
没有读端的时候,想写管道,会得到内核给的SIGPIPE信号。管道破裂。
管道读端不存在的时候,内核是不允许向管道内写入数据的。以下程序能够验证: