热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

为什么管道可以使用的进程之间的关系在LinuxAPI和Bash中是不同的

如何解决《为什么管道可以使用的进程之间的关系在LinuxAPI和Bash中是不同的》经验,为你挑选了1个好方法。

我想知道为什么管道可以使用的进程之间的关系在Linux API和Bash中是不同的.

在Linux API中,未命名的管道(pipe())只能在父子进程之间使用.

在Bash中,可以在两个进程之间使用管道,这两个进程将shell进程作为其共同父进程.

Bash中的管道是否根据Linux API中未命名的管道实现?谢谢.

来自APUE 3ed:

15.2管道

管道是最古老的UNIX系统IPC形式,由所有UNIX系统提供.管道有两个限制.

    从历史上看,它们是半双工的(即,数据仅在一个方向上流动).有些系统现在提供全双工管道,但为了最大程度的便携性,我们永远不应该假设是这种情况.

    管道只能在具有共同祖先的进程之间使用.通常,管道由进程创建,该进程调用fork,管道在父节点和子节点之间使用.

我们将看到FIFO(第15.5节)绕过第二个限制,并且UNIX域套接字(第17.2节)绕过了这两个限制.

...

15.5 FIFO

FIFO有时被称为命名管道.当共同的祖先创建管道时,未命名的管道只能在相关进程之间使用.但是,对于FIFO,不相关的进程可以交换数据.

Ignacio Vazq.. 5

在Linux API中,未命名的管道(pipe())只能在父子进程之间使用.

不对.任何具有文件描述符的进程都可以使用它们:父进程,任何子进程,通过域套接字接收它们的任何进程等.

bash中的管道只是儿童与儿童交流的特定情况.



1> Ignacio Vazq..:

在Linux API中,未命名的管道(pipe())只能在父子进程之间使用.

不对.任何具有文件描述符的进程都可以使用它们:父进程,任何子进程,通过域套接字接收它们的任何进程等.

bash中的管道只是儿童与儿童交流的特定情况.


推荐阅读
author-avatar
土人甜层_233
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有