获取pipe道利用率?

这被标记为回答,但是如果有人知道可以做到这一点的类似fstat的系统调用,我很乐意听到。

我正在处理一些通过命名pipe道进行通信的应用程序(由于传统原因需要)。 一个pipe道有一个固定的容量(65536字节是Linux的默认值),当它满的时候,块写入,直到有足够的空间可用。 这意味着消费者速度的减慢会阻止更快的生产者。 我希望能够做的是定期监测pipe道的利用率。

是否有可能获得pipe道的数据大小(尚未从pipe道读取数据的大小)? fstat总是返回0的大小,预期的行为根据手册页。

是否有符合POSIX标准的方法获取pipe道容量? 显然,fcntl可以做到这一点,因为Linux 2.6.35。 但是,这需要能够在早期版本的Linux上运行。

在一端或两端以非阻塞模式打开管道,始终尝试读取或写入完整的管道缓冲区容量。 read / write最有可能返回比这少。

非阻塞read返回的是当时管道中的数量。 非阻塞write返回的是管道中留下了多少空间。