poll()
фактически не работает с открытыми файлами.Поскольку read()
для файла никогда не будет блокироваться, poll()
всегда будет возвращать, что вы можете прочитать неблокирующую информацию из файла.
Это будет (почти) работать на символьных устройствах *, именованных каналах **или сокеты, так как они блокируются, когда вы read()
из них, когда нет доступных данных.(вам также нужно на самом деле прочитать эти данные, иначе опрос снова и снова скажет, что данные доступны)
Чтобы "опросить" растущий / уменьшающийся файл, см. man inotify
или выполните свой собственный опрос, используяfstat()
в цикле.
* блочные устройства - отдельная история;хотя технически чтение с жесткого диска может блокировать в течение 10 мс или дольше, это не воспринимается как блокировка ввода-вывода в Linux.
** см. также как очистить именованный канал с помощью bash