管道
时间:2007-04-27 来源:hhwls_bin
1.管道特点
1)半双工;
2)只能适用于具有亲缘关系的进程(如父子进程)之间的通信;
3)自成一种独立的文件系统,存在于内存之中;
4)每次读数据都是从管道缓冲区的头部开始,写数据都是从管道的尾部开始。
2.管道表示
管道两端可以用描述字fd[0]和fd[1]来表示。fd[0]称为管道的读端,fd[1]称为管道的写端。
3.管道读规则
1)如果管道的写端不存在,则读端认为已经读到了数据的末尾,读函数返回的字节数为0;
2)如果管道的写端存在,则要看读端请求读的字节数是否大于PIPE_BUF。如果大于,则返回管道内现有的字节数;否则,返回读端实际请求的字节数(管道内的数据量大于读请求的字节数);或者返回管道内现有的数据量(管道内的数据量小于读请求的字节数)。
4.管道写规则
1)如果管道的读端不存在,向管道写数据将会出现错误。内核将会向写进程发送SIFPIPE信号,终止该进程;
2)向管道写入数据将不保证写入的原子性。只要缓冲区有空闲区域,写进程就会向管道内写入数据直至写满,如果此时读进程仍未读走数据,则写进程将一直被阻塞。
相关阅读 更多 +