【问题标题】:POSIX: Pipe syscall in FreeBSD vs LinuxPOSIX:FreeBSD 与 Linux 中的管道系统调用
【发布时间】:2011-03-22 00:56:34
【问题描述】:

在 Linux(2.6.35-22-generic)中,man pipe 声明

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

在 FreeBSD (6.3-RELEASE-p5) 中,man pipe 声明

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

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

为了说明我的意图,我在考试中因为相信 pipe() 是一种方式而丢了一些分数,我正在寻找一些弹药来拿回任何分数;p

【问题讨论】:

  • 我希望你能拿回你的分数。这是一件愚蠢的事情。然而,一般的 POSIX 知识是值得研究的好东西。

标签: linux posix pipe freebsd


【解决方案1】:

我一开始是对 Greg 的回答的评论,但我觉得它更贴切地回答了您的具体问题:

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

数据可以写入文件 描述符 fildes[1] 并从 文件描述符 fildes[0]。继续阅读 文件描述符 fildes[0] 应 访问写入文件的数据 描述符文件 [1] 在 先进先出的原则。这是 未指定 fildes[0] 是否也是 开放写作以及是否 fildes[1] 也开放阅读。

我不会指望拿回积分(尽管你应该这样做)。教授倾向于忽略现实世界,而支持他们认为正确的任何事情。

【讨论】:

  • 感谢您的回复,指向 POSIX 规范的链接特别有用。
【解决方案2】:

FreeBSD man page for pipe 在这一点上非常清楚:

这种管道实现的双向特性不适用于旧系统,因此建议在单向使用管道时使用传统方式使用端点的约定。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-15
    • 2016-01-16
    • 1970-01-01
    • 2017-12-12
    • 2011-08-07
    • 2012-06-30
    相关资源
    最近更新 更多