c - 了解 pipe/fifo 是否已满

c - understand if pipe/fifo is full

我有一个 fifo 打开为 RDWR(用于通信进程-进程)和管道(进程-线程),当我达到管道或 fifos 限制时如何理解?当我尝试写入超过 64 KB 时,它只是在 write() 中等待。

您需要使用非阻塞模式:

pipe2(fds, O_NONBLOCK);

或者如果您需要在创建管道后执行此操作:

int flags = fcntl(fd, F_GETFL, 0);
fcntl(fd, F_SETFL, flags | O_NONBLOCK);

现在,当您读取或写入操作无法立即完成时,它将 return。然后,您可以使用 select()poll() 来确定何时可以再次读取或写入(或者您可以忙等待)。