c - 了解pipe / fifo是否已满

时间:2016-05-07 14:17:06

标签: c pipe named-pipes systems-programming

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

1 个答案:

答案 0 :(得分:4)

您需要使用非阻止模式:

pipe2(fds, O_NONBLOCK);

或者如果您在创建管道后需要这样做:

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

现在,当您读取或写入并且操作无法立即完成时,它将返回。然后,您可以使用select()poll()找出何时可以再次阅读或写入(或者您可以忙着等待)。