在Linux中,我有幾個進程寫入一個命名管道,另一個進程正在讀取它。我懷疑我的閱讀器沒有跟上,並且有很多數據在管道中排隊等待。如何查看有多少數據在命名管道中排隊?
任何人都可以請告訴我,有沒有辦法來檢查/查看有多少數據在管道中排隊?任何Linux命令或C API?
謝謝你的時間。
--KS
在Linux中,我有幾個進程寫入一個命名管道,另一個進程正在讀取它。我懷疑我的閱讀器沒有跟上,並且有很多數據在管道中排隊等待。如何查看有多少數據在命名管道中排隊?
任何人都可以請告訴我,有沒有辦法來檢查/查看有多少數據在管道中排隊?任何Linux命令或C API?
謝謝你的時間。
--KS
我不認爲FIONREAD將作爲FIONREAD被存儲在索引節點作爲i_size由i_size_read返回的值來確定。 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