匿名管道
ls -l | wc -l
ls -l 一个进程将得到的数据输出到标准输出中
wc -l 一个进程读取标准输入,将得到的数据进行统计(这里是统计有多少行)
ls -l|wc -l 将 ls -l 得到的数据交给wc -l处理(进程间通信)
exec fork pipe dup2可完成此操作
管道的读写行为
读管道(read)
管道中有数据
read返回成功读到的字节数(ret>0)
管道中没有数据
当前有进程持有管道的写端 read会阻塞等待
当前没有进程持有管道的写端 read返回0
写管道(write)
管道已满
有进程持有管道的读端 write阻塞等待
没有进程持有管道的读端 进程异常终止(因为收到了SIGPIPE信号)
管道未满
有进程持有管道的读端 write返回成功写入的字节数
没有进程持有管道的读端 进程终止
匿名管道的局限性:只能用于进程关联间的通信
什么是关联进程:父进程及父进程的后代进程
命名管道: fifo
创建命名管道的方法:
命令:mkfifo
函数:int mkfifo(const char *pathname,mode_tmode);
命名管道的特点:
命名管道可以用于任何进程间的通信
如果我们以只读的形式打开管道,并且当前没有进程以写的形式打开管道,这时,我们这个进程就会阻塞在open函数上,直到有进程为写而打开管道
如果我们以只写的形式打开管道,并且当前没有进程以读的形式打开管道,这时,我们这个进程就会阻塞在open函数上,直到有进程为读而打开管道
如果一个进程以读的形式打开管道,open不会阻塞
命名管道属于伪文件,不会占用磁盘空间,实质是内核中的一块缓冲区,在使用这个管道的最后的一个进程关闭管道或者进程结束,当前这个管道里的数据就回被释放,在下一次打开管道的时候,管道是空的.