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
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值