POSIX:在FreeBSD和Linux中管道系统调用

时间:2011-03-22 00:56:35

标签: linux posix pipe freebsd

在Linux(2.6.35-22-generic)中,man pipe表示

  

pipe()创建一个管道,一个可用于进程间通信的单向数据通道。“

在FreeBSD(6.3-RELEASE-p5)中,man pipe表示

  

pipe()系统调用创建一个管道,它是一个允许双向数据流的对象,并分配一对文件描述符。“

一个是单向的,另一个是双向的。我希望这不是一个愚蠢的问题,但哪种方法是这样做的标准方法?它们都符合POSIX标准吗?

为了明确我的意图,我在考试中失去了一些分数,因为相信管道()是一种方式,我正在寻找一些弹药来获得任何积分; p

2 个答案:

答案 0 :(得分:4)

我首先开始对Greg的回答发表评论,但我发现它更接近你的具体问题:

pipe() s documentation in the POSIX standard明确指出有问题的行为是“未指定的” - 也就是说,pipe()不需要是双向的,尽管它不是被禁止的。 Linux是单向的,FreeBSD是双向的。两者都是兼容的,只是实现了不需要的其他行为(但不会破坏为在兼容系统上工作而构建的应用程序)。

  

可以将数据写入文件   描述符fildes [1]并从中读取   文件描述符fildes [0]。继续阅读   文件描述符fildes [0]应该   访问写入文件的数据   描述符fildes [1]在a   先进先出。它是   未指定fildes [0]是否也是   开放写作和fildes [1]   也是开放阅读。

我不会指望得到积分(尽管你应该)。教授倾向于忽视现实世界,支持他们认为正确的事情。

答案 1 :(得分:3)

FreeBSD man page for pipe在这一点上非常明确:

  

此管道实现的双向性质不能移植到旧系统,因此建议在一个方向上使用管道时使用传统方式使用端点的约定。