Answers:
这取决于每个进程要写多少(假设您的操作系统在这方面符合POSIX)。来自write()
:
除了以下例外,对管道或FIFO的写入请求应以与常规文件相同的方式处理:
[...]
- {PIPE_BUF}字节或更少字节的写请求不应与来自在同一管道上进行写操作的其他进程的数据交织。大于{PIPE_BUF}个字节的写操作可能会在任意边界与其他进程的写操作交错插入数据,无论是否设置了文件状态标志的O_NONBLOCK标志。
同样在关于管道和FIFO 的基本原理部分中:
- 原子/非原子:如果一个操作中写入的总量未与任何其他进程的数据交错,则写入是原子的。当有多个作者将数据发送到单个读者时,此功能很有用。应用程序需要知道可以自动执行多大的写请求。此最大值称为{PIPE_BUF}。POSIX.1-2008的这一卷并未说明对{PIPE_BUF}个字节的写请求是否是原子的,而是要求对{PIPE_BUF}个字节或更少的字节的写请求是原子的。
if的值PIPE_BUF
由每个实现定义,但最小值为512字节(请参阅参考资料limits.h
)。在Linux上,它是4096个字节(请参阅参考资料pipe(7)
)。
PIPE_BUF
常见的Unix系统上观察值的表:ar.to/notes/posix#pipe-buf
setvbuf(stdout, NULL, _IOLBF,512)
)可以做到这一点,而无需使用低级函数。