use*_*147 11 c posix pipe atomic
man pipe -s7文件很好地写入管道.对我来说重要的部分是,如果设置了O_NONBLOCK,写入只会部分完成,并且写入长度大于PIPE_BUF.
但是,关于读取结束没有任何说法.
我在写端以阻塞模式通过管道发送表示事件的结构.在读取结束时,我正在非阻塞模式下的更新循环中处理这些事件(和其他事物).
由于我的结构小于PIPE_BUF,所以会读取ALWAYS读取整数个结构吗?或者我是否需要处理只读部分结构的可能性?
常识告诉我,读取行为将反映记录的写入行为,但如果指定了这一点,我会更高兴.
我正在使用Linux(内核3.8,x86_64).但重要的是我的代码可以跨不同的UNIX风格和CPU架构移植.
谢谢.克里斯.
评论是正确的:read不是原子的.原子性的全部意义write在于允许多个编写器在没有损坏的情况下交错数据.多个读取器的用处要少得多,但即使它们很有用,支持原子读取也需要在管道中维护数据包边界,这是不存在的.
| 归档时间: |
|
| 查看次数: |
1161 次 |
| 最近记录: |