Почему inotifywait не сообщает об изменениях, внесенных в файл емкости батареи?

Почему inotifywait не сообщает об изменениях, внесенных в файл емкости батареи?

Я хочу знать, когда меняется заряд моей батареи, и не хочу просто запускать демон, который проверяет это каждые пять секунд.

Я пробовал запускать inotifywait -m /sys/class/power_supply/BAT1/capacity, но он не регистрирует никаких изменений, хотя cat-ing время от времени дает разные результаты! Фактически, он сообщает что-то только тогда, когда я использую catего или запускаю acpi. Я также пробовал запускать inotifywaitдругие файлы в каталоге BAT1 и обнаружил, что ни один из них не был замечен в измененном виде -, несмотря на то, что дает новые результаты с cat.

Так почему же не inotifywaitсообщает об изменениях? И как я могу получать мгновенные обновления об изменениях уровня заряда батареи, если я не могу использовать inotify?

решение1

Как сказал @rudib в комментариях, все /sysвиртуально: содержимое каждого файла создается заново из соответствующей структуры данных ядра всякий раз, когда оно фактически считывается. Таким образом, нет никаких модификаций в смысле записи чего-либо в файл для его изменения.

То же самое касается /proc.

Уведомления о состоянии батареи доступны какобщие сообщения Netlink, с именем семьи = acpi_eventи именем группы multicast acpi_mc_group. К сожалению, я не знаю инструмента, который бы давал легкий доступ к сообщениям Netlink для скриптов оболочки, но, по-видимому,pyroute2Инструмент также может декодировать сообщения NetLink, содержащие события ACPI, поэтому он может быть полезен в качестве примера кода Python.

Связанный контент