在什么条件下管道读取原子?

use*_*147 11 c posix pipe atomic

man pipe -s7文件很好地写入管道.对我来说重要的部分是,如果设置了O_NONBLOCK,写入只会部分完成,并且写入长度大于PIPE_BUF.

但是,关于读取结束没有任何说法.

我在写端以阻塞模式通过管道发送表示事件的结构.在读取结束时,我正在非阻塞模式下的更新循环中处理这些事件(和其他事物).

由于我的结构小于PIPE_BUF,所以会读取ALWAYS读取整数个结构吗?或者我是否需要处理只读部分结构的可能性?

常识告诉我,读取行为将反映记录的写入行为,但如果指定了这一点,我会更高兴.

我正在使用Linux(内核3.8,x86_64).但重要的是我的代码可以跨不同的UNIX风格和CPU架构移植.

谢谢.克里斯.

R..*_*R.. 7

评论是正确的:read不是原子的.原子性的全部意义write在于允许多个编写器在没有损坏的情况下交错数据.多个读取器的用处要少得多,但即使它们很有用,支持原子读取也需要在管道中维护数据包边界,这是不存在的.