Linuxのボックスでは、名前付きパイプに書き込むプロセスと、それを読み込む別のプロセスがあります。私は読者が追いついていないと思っていて、パイプにたくさんのデータが並んでいます。名前付きパイプでどのくらいのデータがキューに入れられているかを確認する方法はありますか。
パイプにキューされているデータの量を確認する方法はありますか?任意のLinuxコマンドまたはC API?
ありがとうございます。
--KS
Linuxのボックスでは、名前付きパイプに書き込むプロセスと、それを読み込む別のプロセスがあります。私は読者が追いついていないと思っていて、パイプにたくさんのデータが並んでいます。名前付きパイプでどのくらいのデータがキューに入れられているかを確認する方法はありますか。
パイプにキューされているデータの量を確認する方法はありますか?任意のLinuxコマンドまたはC API?
ありがとうございます。
--KS
私はFIONREADはi_sizeとしてiノードに格納されてi_size_readによって返された値によって決定されるようFIONREADがうまくいくとは思いません。 i_sizeはパイプでは使用されません(これは、statが常にパイプのサイズに対して0を返す理由です)。
http://lxr.free-electrons.com/source/include/linux/fs.h#L848
バッファ(i_node.i_pipe.bufs)のLENプロパティを合計することによって、サイズを取得することが可能です。この値はstatまたはioctlによって公開されているようには見えません。
あなたはRECV(...、MSG_PEEK)を試みることができる - これは(その次の読み込みは同じデータを返すでしょう)、それからのデータを削除せずにパイプから読み込む必要があります。それは必ずしもすべてのデータがキューに入れられていることを伝えるとは限りません。
recv()は非ソケットファイルで動作しますか? – bdonlan
ですから、一般にパイプから読み取られたデータは削除されますか? – Chaitanya