パイプの現在のバイト数を印刷します。

パイプの現在のバイト数を印刷します。

2 つのプログラム間で情報を転送するパイプを作成できます。これらのユーティリティを使用することもできますPVパイプラインを介してデータ全体の進行状況を表示します。私の場合はNamed Pipeを使用しています。データがパイプに書き込まれると、他のプログラムがそれを読み取るまでパイプに残ります。

実際に読み取らずにパイプの現在のバイト数を印刷できますか?


修正する:

次の記事が役に立ちました。

https://stackoverflow.com/a/34373005/1808261

https://stackoverflow.com/a/6979975/1808261

ベストアンサー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

おすすめ記事