#c #linux
#c #linux
Вопрос:
В окне Linux у меня есть пара процессов, записывающих в именованный канал, а другой — считывающий его. Я подозреваю, что мой читатель не успевает, и в канале много данных, поставленных в очередь.
Кто-нибудь, пожалуйста, скажите мне, есть ли способ проверить / посмотреть, сколько данных помещено в очередь в канале? Любая команда Linux или C API?
Спасибо за ваше время.
—KS
Ответ №1:
Я не думаю, что FIONREAD будет работать, поскольку FIONREAD определяется значением, возвращаемым i_size_read, которое хранится в индексе как i_size . i_size не используется с каналами (именно поэтому stat всегда возвращает 0 для размера канала).
http://lxr.free-electrons.com/source/include/linux/fs.h#L848
Должна быть возможность получить размер путем суммирования свойства len буферов (i_node.i_pipe.bufs). Не похоже, что это значение отображается stat или ioctl.
Ответ №2:
Вы можете попробовать recv(…, MSG_PEEK) — это должно считываться из канала без удаления из него данных (поэтому при следующем чтении будут возвращены те же данные). Это не обязательно расскажет вам обо всех данных, поставленных в очередь, только о некоторых из них.