【发布时间】:2019-06-20 12:44:25
【问题描述】:
我正在阅读 Linux 中的 pipe(7)s 并遇到以下问题:
POSIX.1 说
write(2)s 必须小于PIPE_BUF字节 atomic:输出数据以连续的形式写入管道 顺序。超过PIPE_BUF字节的写入可能是非原子的: 内核可以将数据与其他进程写入的数据交错。 POSIX.1 要求PIPE_BUF至少为 512 字节。 (在 Linux 上,PIPE_BUF是 4096 字节。)
这不是很清楚。 POSIX 是否要求所有少于PIPE_BUF 的写入都是原子的?或者这仅适用于使用 pipe(int[2], int) 创建的管道?
【问题讨论】:
-
还有哪些系统调用创建了管道? (编辑:
mkfifo(),我猜...) -
@Shawn
pipe2(int[], int)? -
@Shawn
open如果你给它一个命名管道,但 OP 一般询问写入。 -
@SomeName
pipe只需要一个int[2]。没有第二个论点。pipe2仅适用于 Linux(不是 POSIX 的一部分)。