在Linux(2.6.35-22-generic)中,man pipe
表示
pipe()创建一个管道,一个可用于进程间通信的单向数据通道。“
在FreeBSD(6.3-RELEASE-p5)中,man pipe
表示
pipe()系统调用创建一个管道,它是一个允许双向数据流的对象,并分配一对文件描述符。“
一个是单向的,另一个是双向的。我希望这不是一个愚蠢的问题,但哪种方法是这样做的标准方法?它们都符合POSIX标准吗?
为了明确我的意图,我在考试中失去了一些分数,因为相信管道()是一种方式,我正在寻找一些弹药来获得任何积分; p
答案 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
在这一点上非常明确:
此管道实现的双向性质不能移植到旧系统,因此建议在一个方向上使用管道时使用传统方式使用端点的约定。