获取管道利用率?

Get pipe utilization?

这已被标记为已回答,但如果有人知道可以实现此目的的类似 fstat 的系统调用,我很想听听。

我正在开发一些通过命名管道进行通信的应用程序(出于遗留原因需要)。管道具有固定容量(65536 字节是 Linux 默认值),当它变满时,将阻止写入,直到有足够的 space 可用。这意味着较慢的消费者将阻止较快的生产者。我希望能够做的是定期监控管道的利用率。

是否可以获取管道的数据大小(尚未从管道中读取的数据大小)? fstat 始终 returns 大小为 0,根据手册页的预期行为。

是否有 posix 合规的方式获取管道容量?显然,fcntl 从 Linux 2.6.35 开始就可以做到这一点。但是,这需要能够在 Linux.

的早期版本上 运行

在一端或两端以非阻塞模式打开管道,并始终尝试读取或写入完整的管道缓冲区容量。 read/write 那么很可能 return 会比那个少。

多么非阻塞 read returns 是当时管道中有多少。 什么是非阻塞 write returns 是多少 space 留在管道中。