Объединить события inotify - PullRequest
0 голосов
/ 10 апреля 2019

Я читаю man inotify.7 и заметил следующее:

В случае последовательного вывода событий inotify, произведенных в файле inotify дескриптор идентичен (тот же wd, маска, cookie и имя), затем они объединяются в одно событие, если более старое событие еще не было читать (но см. ошибки). Это уменьшает количество памяти ядра требуется для очереди событий, но также означает, что приложение не может используйте inotify для надежного подсчета файловых событий.

Если предположить, что у меня есть int inotify_fd, это действительный дескриптор файла inotify с несколькими зарегистрированными часами, значит ли это, что если мы произнесем следующие события в буфере ядра для чтения:

-----------------------oldest-----------------------
1. wd = 1, mask = IN_CREATE, cookie = 0, name = file1
2. wd = 1, mask = IN_CREATE, cookie = 0, name = file1
3. wd = 1, mask = IN_CREATE, cookie = 0, name = file1
4. wd = 2, mask = IN_MODIFY, cookie = 0, name = file2
5. wd = 1, mask = IN_CREATE, cookie = 0, name = file1
6. wd = 2, mask = IN_MODIFY, cookie = 0, name = file2

, если предположить, что за это время не было прочитано, то вышеописанные события будут объединены в

-----------------------oldest-----------------------
5. wd = 1, mask = IN_CREATE, cookie = 0, name = file1
6. wd = 2, mask = IN_MODIFY, cookie = 0, name = file2

? Таким образом, вместо 6 у нас будет 2 (1-4 с одинаковыми wd, mask, cookie, name и, следовательно, объединены).

ОШИБКИ, упомянутые в приведенной выше цитате, следующие:

До ядра 2.6.25 код ядра, предназначенный для объединения последовательные идентичные события (т. е. два последних события могли потенциально могут быть объединены, если старшее еще не было прочитано) вместо проверяется, может ли последнее событие объединяться с самым старым непрочитанное событие.

Но поскольку я использую ядро ​​4.15, похоже, оно не связано с моим делом.

...