繁体   English   中英

原子写入文件描述符

[英]Atomic writes to a file descriptor

我正在阅读有关Linux中的pipe(7)的内容,并遇到了以下问题:

POSIX.1说,小于PIPE_BUF字节的write(2)必须是原子的:输出数据作为连续序列写入管道。 超过PIPE_BUF字节的写入可能是非原子的:内核可能会将数据与其他进程写入的数据进行交错。 POSIX.1要求PIPE_BUF至少为512个字节。 (在Linux上, PIPE_BUF为4096字节。)

这还不太清楚。 POSIX是否要求所有写入少于PIPE_BUF是原子的? 还是仅使用pipe(int[2], int)创建的pipe(int[2], int)适用?

所引用的行为是特定于管道的(但无论如何创建,它都适用于所有管道(例如,通过pipemkfifo + open等))。

的POSIX描述write

对管道或FIFO的写请求应以与常规文件相同的方式处理,但以下情况除外:

  • [...]

  • {PIPE_BUF}字节或更少字节的写请求不应与来自在同一管道上进行写操作的其他进程的数据交织。 大于{PIPE_BUF}个字节的写操作可能会在任意边界上与其他进程的写操作交织数据,无论是否设置了文件状态标志的O_NONBLOCK标志。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM