POSIX:FreeBSD vs Linux中的pipe道系统调用

在Linux(2.6.35-22-generic)中, man pipe指出

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

在FreeBSD(6.3-RELEASE-p5)中, man pipe指出

pipe()系统调用创build一个pipe道,这是一个允许双向数据stream的对象,并分配一对文件描述符。

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

为了使我的意图清楚,我相信pipe()是一种方法,并且正在寻找一些弹药以获得任何点数,因此在考试中丢失了一些分数; p

Solutions Collecting From Web of "POSIX:FreeBSD vs Linux中的pipe道系统调用"

起初,我首先对格雷格的回答发表了评论,但是我觉得它更接近地回答了你的具体问题:

在POSIX标准中, pipe()的文档明确指出所讨论的行为是“未指定的” – 也就是说, pipe()不是双向的,尽管它是不被禁止的。 Linux是单向的,FreeBSD是双向的。 两者都是兼容的,只是实现不需要的附加行为(但不会破坏构建在兼容系统上的应用程序)。

数据可以写入文件描述符fildes [1],并从文件描述符fildes [0]中读取。 对文件描述符fildes [0]的读取将按照先进先出的原则访问写入文件描述符fildes [1]的数据。 没有指定fildes [0]是否也可以书写,fildes [1]是否也可以阅读。

我不会指望得到点(虽然你应该)。 教授们倾向于忽视现实世界而偏向于他们认为正确的事情。

FreeBSD的pipe手册页在这一点上非常清楚:

这种管道实现的双向特性不能移植到较老的系统,所以建议在一个方向上使用管道时,使用传统方式使用端点的惯例。