我有多个进程(有些进程内部有多个线程)向单个命名管道写入数据。每个写入者都使用
我有另一个进程从该管道读取数据,并使用
当
或者
我正在写入和读取字符串,它们的长度都小于
O_WRONLY
打开管道。我有另一个进程从该管道读取数据,并使用
select
阻塞。读取者使用O_RDONLY | O_NONBLOCK
打开管道。当
select
在读取者中被唤醒时,read
会返回最多一个可用的数据块,还是可能返回多个数据块?如果是前者,则我期望在读取第一个块后,select
将立即唤醒,直到我完成读取其余块。或者
read
可能返回少于写入者写入的块数吗?我正在写入和读取字符串,它们的长度都小于
PIPE_BUF
,因此我知道这些写入是原子的。我可以轻松地添加分隔符来检查多个字符串,但我只是好奇在Linux上它是如何工作的。