Уведомьте относительно изменений на файле под/proc

Вы могли изучить дополнение Теледактиля для Thunderbird из 5digits.org. Они производят Пятипалое дополнение для Firefox, который работает приятно на средства управления, хотя текстовые поля по общему признанию un-vim-ish.

В списке функций говорится, что он поддерживает внешних редакторов, таким образом, gvim мог быть в Вашем будущем.

13
14.09.2013, 15:36
4 ответа

То, что я ищу, является некоторым способом получить уведомление об изменениях на файле [в proc]

Вы не можете, потому что они не файлы. Это - не совсем дублирующийся вопрос, но ответ здесь объясняет почему.

/proc интерфейс ядра. Нет никаких реальных файлов там, следовательно они не могут измениться. Чтение из дескрипторов является запросом и данными в файле, когда Вы читаете, это - ответ на это.

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

Если Вы stat файлы procfs, atime и mtime будут тем же: для некоторых файлов это - каждый раз, когда вызов статистики был для других время от во время начальной загрузки системы. В первом случае это, будет всегда казаться, изменилось во втором, это, никогда будет казаться, не изменилось.

10
27.01.2020, 19:53
  • 1
    К сожалению, даже опрос его каждую секунду добавляет значительную задержку (например, 500 мс). Я надеялся, что будет быстрее/больше эффективный способ сделать это, но так как Вы упомянули, что приложения как вершина делают это тот же путь, я думаю, что оставлю это тем путем. –  Teresa e Junior 14.09.2013, 16:38
  • 2
    @TeresaeJunior, Если задержка является проблемой (я думаю, что это не здесь), например, потому что продолжительность опроса используется в вычислении, Вы были бы время фактическая продолжительность (и не только используют время, Вы попросили спать). Это походит на много хотя; я никогда не представлял сценарии удара, таким образом, я не знаю то, что было бы нормально здесь (хм... хороший отдельный вопрос). Вызов awk == fork() и материал как этот является дорогим; утилиты, записанные, все в C, как упомянуто, имели бы более быстрые методы. Я все еще не думаю, что Вы добавляете много загрузки в систему полный tho. –  goldilocks 14.09.2013, 16:53
  • 3
    Нет, извините, я на самом деле имел в виду: со времени я включаю наушники до следующего сна, там некоторая значимая задержка. Но я не планирую уменьшение времени сна.Спасибо за помощь! –  Teresa e Junior 14.09.2013, 19:19
[115040] Если вы используете PulseAudio, [115427] подписка на пактл[115428] делает это.[115041].
4
27.01.2020, 19:53

Также имейте в виду, что некоторые файлы под /proc/позволяют отслеживать изменения с помощью опроса, например, если вы делаете man proc, вы можете прочитать следующее о файле /proc/self/mounts:

/proc/[pid]/mounts (начиная с Linux 2.4.19) В этом файле перечислены все файловые системы, смонтированные в настоящее время в пространстве имен монтирования процесса (см. mount_namespaces(7)). Тем формат этого файла задокументирован в fstab(5).

Начиная с версии ядра 2.6.15, этот файл является опрашиваемым: после открытия файла для чтения, изменение в этом файле (т.е. Монтирование или размонтирование файловой системы) приводит к тому, что select(2) помечает дескриптор файла как имеющий исключительное состояние, а poll(2) и epoll_wait(2) пометить файл как имеющий приоритетное событие (POLLPRI). (До Linux 2.6.30 изменение в этом файле было указывается дескриптором файла, помеченным как читаемый для select(2) и помеченным как имеющий условие ошибки для poll(2) и epoll_wait(2).)

И это именно то, что реализуется в следующем вопросе:

https://stackoverflow.com/questions/5070801/monitoring-mount-point-changes-via-proc-mounts

2
27.01.2020, 19:53

У меня был похожий случай использования -, и я обнаружил, что успешно отслеживаю каталог, а не сам «файл».

Попробуйте

inotifywait -r -m /proc/asound/card0/

и вы должны увидеть события вроде:

/proc/asound/card0/ OPEN codec#0
/proc/asound/card0/ ACCESS codec#0
/proc/asound/card0/ CLOSE_NOWRITE,CLOSE codec#0

Простой grepпротив codec#0и немного awkсообщит вам, была ли запись в файл.

1
11.10.2021, 13:42

Теги

Похожие вопросы