Chinaunix首页 | 论坛 | 博客
  • 博客访问: 46409
  • 博文数量: 9
  • 博客积分: 1433
  • 博客等级: 上尉
  • 技术积分: 112
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-12 23:41
文章分类
文章存档

2011年(1)

2009年(8)

我的朋友

分类: LINUX

2009-04-14 23:27:40


  管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系的进程间的通信

  管道的特点:管道是半双工的,数据只能向一个方向流动;需要双方通信,需要建立起两个管道。
             只能用于父子进程或者兄弟进程之间(具有亲缘关系的进程)
             单独构成一种独立的文件系统;管道对于管道两端的形成而言,就是一个文件,但它不是普通的文件,它不属于某种文件系统,而是自立门户,单独构成一种文件系统,并且只存在与内存中



                 数据的读出和写入:一个进程向管道中写的内容被管道另一端的进程读出。写入的内容每次都添加在管道的缓冲区的末尾,并且每次都是从缓冲区的头部读出数据。

   在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上输出的信息,这个可以用来做广播教学!)  



阅读(1930) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~