gpt4 book ai didi

c - Linux 上的管道读取是原子的吗(多个作者,一个读者)?

转载 作者:太空狗 更新时间:2023-10-29 12:18:53 28 4
gpt4 key购买 nike

我有多个进程(以及某些进程中的多个线程)写入单个命名管道。管道以 O_WRONLY 为每个编写器打开。

我有另一个进程从这个管道读取数据,用select 阻塞。管道用 O_RDONLY | 打开阅读器中的 O_NONBLOCK

当 reader 中的 select 唤醒时,read 会返回最多一个可用数据 block ,还是会返回多个数据 block ?如果是前者,那么我希望在我读取第一个 block 后,select 会立即唤醒,直到我读取完剩余的 block 。

或者 read 是否可以返回少于一个作者编写的 block ?

我正在写入和读取字符串,它们都小于 PIPE_BUF,所以我知道写入是原子的。我可以轻松地附加一个分隔符来检查多个字符串,但我只是好奇它在 Linux 上是如何工作的。

最佳答案

read 将返回管道中所有可用的数据,无论使用了多少 write 来写入该数据。当管道中有更多数据时,返回的字节数将与请求的大小相同。在这种情况下,select 会立即返回,表示有数据需要读取。

您必须对写入管道的每个卡盘进行定界,并在读取后将其分开。

关于c - Linux 上的管道读取是原子的吗(多个作者,一个读者)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16741589/

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