这标记为已回答,但如果有人知道可以实现这一目标的类似系统调用,我很乐意听到。
我正在开发一些通过命名管道进行通信的应用程序(由于遗留原因需要)。管道具有固定容量(默认为65536字节),当它填满时,块会写入,直到有足够的空间可用。这意味着较慢的消费者将阻止更快的生产者。我希望能够做的是定期监控管道的使用情况。
是否可以获取管道的数据大小(尚未从管道中读取数据的大小)?根据手册页,fstat总是为大小,预期行为返回0。
是否有符合posix标准的获取管道容量的方法?显然,自Linux 2.6.35以来,fcntl可以做到这一点。但是,这需要能够在早期版本的Linux上运行。
答案 0 :(得分:1)
在一端或两端以非阻塞模式打开管道,并始终尝试读取或写入完整的管道缓冲区容量。 read
/ write
很可能会比那更少。
非阻塞read
返回的是当时管道中的数量。
非阻塞write
返回的是管道中剩余的空间。