pipe与popen

1。 PIPE
       这种形式的IPC被各个版本的UNIX版本与衍生版本(包括linux)所支持,尤其是半双工的PIPE在现实的应用种使用的最多。
       半双工的PIPE只能使用在具有亲缘关系的进程种,最常见的就是父子进程中,通常的使用方法是父进程调用pipe函数,然后再调用fork函数产生一个子进程,在父子进程中关闭自己不需要的管道,然后冲过复制文件描述符来确定最终的输入和输出。
       需要注意的是,在pipe中传输的是无符号的字节流形式,所以pipe不适用于传输一个struct,如果一定要这样做,就需要注意传输时不能超过PIPE_BUFFER,并且在有多个进程写同一个管道时,可能会产生交错的数据。
       最后还需要注意的是pipe的读写之间的关系和写对读的依赖性,以及读操作可能产生的各种结果。
       pipe的操作需要经过内核的中转才能进行,读写过程共需要两次内核空间的拷贝和输入/输出操作。
 
2。 popen和pclose函数
       这两个函数实质上是利用pipe实现的。
       popen和pclose的默认的输入/输出都是标准的输入和输出。这两个函数的实际操作是打开一个管道,然后fork一个进程,关闭不使用的管道端口,exec一个命令,然后等待命令的终止。
       popen先执行fork,然后exec执行一个特定的cmd,并返回一个标准的I/O指针,所以在实际的开发中,我们可能特别的需要记录popen所创建的子进程的pid和打开的文件描述符,POSIX2要求子进程关闭以前调用popen时形成,但前仍未关闭的所有I/O流。
       需要注意的是popen所创建的子进程的输出是标准的输出,应该是不能改变的,因为它返回的是一个标准的I/O描述符。
 
3。  协同进程
       协同进程通常指的是UNIX的一些过滤程序。UNIX的过滤程序通常从标准输入读入数据,然后从标准输出输出处理过的数据。当同一个程序产生某些过滤输入同时又读取该过滤输出时,该过滤进程就成为协同进程。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值