2 つのプログラム間で情報を転送するパイプを作成できます。これらのユーティリティを使用することもできます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