4 c pipe named-pipes systems-programming
我有一个作为 RDWR(用于通信进程-进程)和管道(进程-线程)打开的 fifo,我如何理解何时达到管道或 fifos 限制?当我尝试写入超过 64 KB 时,它只是在 write() 中等待。
您需要使用非阻塞模式:
pipe2(fds, O_NONBLOCK);
Run Code Online (Sandbox Code Playgroud)
或者,如果您需要在创建管道后执行此操作:
int flags = fcntl(fd, F_GETFL, 0);
fcntl(fd, F_SETFL, flags | O_NONBLOCK);
Run Code Online (Sandbox Code Playgroud)
现在,当您读取或写入并且操作无法立即完成时,它将返回。然后您可以使用select()或poll()找出何时可以再次读取或写入(或者您可以只是忙等待)。