管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系的进程间的通信
管道的特点:管道是半双工的,数据只能向一个方向流动;需要双方通信,需要建立起两个管道。
只能用于父子进程或者兄弟进程之间(具有亲缘关系的进程)
单独构成一种独立的文件系统;管道对于管道两端的形成而言,就是一个文件,但它不是普通的文件,它不属于某种文件系统,而是自立门户,单独构成一种文件系统,并且只存在与内存中。
数据的读出和写入:一个进程向管道中写的内容被管道另一端的进程读出。写入的内容每次都添加在管道的缓冲区的末尾,并且每次都是从缓冲区的头部读出数据。
在bash shell 中,管道可用于输入重定向,它将一个命令的输出直接定向到另一个命令的输入
例如:find /etc/ -name ifcfg-* |wc -l 后,相应的shell程序将创建find以及wc两个进程和这两个进程间的管道。
有名管道(named pipo或FIFO),可以让不相关的进程也能交换数据
如果当前打开操作是为读而打开FIFO时,若已经有相应的进程为写而打开FIFO时,则当前打开操作将返回成功;否则,可能阻塞知道有相应的进程为写而打开该FIFO(当前打开操作设置了阻塞标志);或者,成功返回(当前打开操作没有设置阻塞标志)
如果当前打开操作是为了写而打开FIFO时,如果已经有相应进程为读而打开该FIFO,则当前打开草所将成功返回;否则,可能阻塞直到有相应进程为读而打开该FIFO(当前打开操作设置了阻塞标志);或者,返回ENXIO错误(当前打开操作没有设置阻塞标志)。
例如:tty1#mkfifo /tmp/popi-file
tty2#cat /tmp/popi-file
tty1#echo "input" >/tmp/popi-file
tty1#srcipt -f /tmp/popi-file
tty2#cat /tmp/popi-file
tty1#ls (这时候在tty2上面就可以看到tty1上输出的信息,这个可以用来做广播教学!)
阅读(1979) | 评论(0) | 转发(0) |