gpt4 book ai didi

c - 在什么条件下管道读取是原子的?

转载 作者:太空狗 更新时间:2023-10-29 16:44:50 26 4
gpt4 key购买 nike

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

然而,关于读取端什么也没说。

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

因为我的结构比 PIPE_BUF 小,读取总是读取整个结构吗?或者我是否需要处理只有部分结构被读取的可能性?

常识告诉我读取行为将反射(reflect)记录的写入行为,但如果指定这一点我会更高兴。

我在 Linux(内核 3.8、x86_64)上工作。但重要的是我的代码可以跨不同的 UNIX 风格和 CPU 架构移植。

谢谢。克里斯。

最佳答案

注释是正确的:read 不是原子的。 write 的原子性的全部意义在于允许多个编写者不会因交错数据而损坏。多个读取器的用处要小得多,但即使它们有用,支持原子读取也需要在管道中维护数据包边界,而这并不存在。

关于c - 在什么条件下管道读取是原子的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14661708/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com