두 프로그램 간에 정보를 전송하는 파이프를 만들 수 있습니다. 이런 유틸리티를 사용할 수도 있습니다PV파이프라인을 통해 전체 데이터의 진행 상황을 봅니다. 제 경우에는 Named Pipe를 사용하고 있습니다. 데이터가 파이프에 기록되면 다른 프로그램이 이를 읽을 때까지 파이프에 남아 있습니다.
실제로 읽지 않고 파이프의 현재 바이트 수를 인쇄할 수 있습니까?
고쳐 쓰다:
다음 기사가 도움이 되었습니다.
답변1
이 작업을 수행할 때 다음 사항에 유의하세요.
cmd > named-pipe
다른 프로세스에는 읽기 위해 파이프가 열려 있지 않지만 open()
정지되어 있습니다. 위 작업은 아직 시작되지도 않은 open()
셸에 의해 수행되므로 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