2011-10-13 2 views
6

Linuxのボックスでは、名前付きパイプに書き込むプロセスと、それを読み込む別のプロセスがあります。私は読者が追いついていないと思っていて、パイプにたくさんのデータが並んでいます。名前付きパイプでどのくらいのデータがキューに入れられているかを確認する方法はありますか。

パイプにキューされているデータの量を確認する方法はありますか?任意のLinuxコマンドまたはC API?

ありがとうございます。

--KS

答えて

1

私は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によって公開されているようには見えません。

https://github.com/mirrors/linux-2.6/blob/master/fs/pipe.c

0

あなたはRECV(...、MSG_PEEK)を試みることができる - これは(その次の読み込みは同じデータを返すでしょう)、それからのデータを削除せずにパイプから読み込む必要があります。それは必ずしもすべてのデータがキューに入れられていることを伝えるとは限りません。

+0

recv()は非ソケットファイルで動作しますか? – bdonlan

+0

ですから、一般にパイプから読み取られたデータは削除されますか? – Chaitanya

関連する問題