我有一个fifo打开作为RDWR(用于通信进程 - 进程)和管道(进程线程),我怎么能理解何时达到管道或fifos限制?当我尝试写入超过64 KB时,它只是在write()中等待。
答案 0 :(得分:4)
您需要使用非阻止模式:
pipe2(fds, O_NONBLOCK);
或者如果您在创建管道后需要这样做:
int flags = fcntl(fd, F_GETFL, 0);
fcntl(fd, F_SETFL, flags | O_NONBLOCK);
现在,当您读取或写入并且操作无法立即完成时,它将返回。然后,您可以使用select()
或poll()
找出何时可以再次阅读或写入(或者您可以忙着等待)。