我可以创建一个管道来在两个程序之间传输信息。我什至可以使用像这样的实用程序光伏发电查看通过管道的总数据的进度。就我而言,我使用的是命名管道。当数据写入管道时,它将保留在那里,直到其他程序将其读出。
是否可以打印管道中的当前字节数而不实际读出它们?
更新:
发现这些文章有用:
答案1
请注意,当您这样做时:
cmd > named-pipe
虽然没有其他进程打开管道进行读取,但它是open()
挂起的。上面的操作open()
是由 shell 完成的,cmd
甚至还没有启动,所以不会向它发送任何数据。
在许多系统(如 Solaris、AIX 或 HP/UX)(但不是 Linux)上,管道中的字节数(如果实例化)将显示在ls -l
管道的大小字段中。
在某些系统(包括 Linux,请参阅管道(7)那里),您可以使用 . 获取管道(命名或未命名)中的字节数FIONREAD
ioctl()
。但是,它必须在管道上的文件描述符上运行(到任一端),这意味着对于命名管道,您必须打开它,这意味着您最终可能会实例化管道作为副作用(并杀死关闭时它)。
perl -le 'require "sys/ioctl.ph";
ioctl(STDIN, &FIONREAD, $n) or die$!;
print unpack "L", $n' <> named-pipe