Обнаружение изменений в открытом файле - PullRequest
8 голосов
/ 22 января 2009

Предположим, у меня есть открытый файл. Как я могу определить, когда файл изменяется другой программой в фоновом режиме. Некоторые текстовые редакторы могут обнаруживать и обновлять открытый файл, если он изменяется другим процессом.

Я специально спрашиваю об этом с C под Linux (похоже, это зависит от ОС).

Ответы [ 3 ]

11 голосов
/ 22 января 2009

Если вы не хотите опрашивать файл, используя stat, и не возражаете относиться к Linux, то вы можете использовать API inotify. Ваше ядро ​​должно быть 2.6.13 или новее и glibc 2.4 или новее (таковым будет, если вы ориентируетесь на что-либо за последние 2 или 3 года). API в основном предоставляет дескриптор файла, который вы можете poll или select и read для получения информации об измененных файлах. Если ваше приложение интерактивное, как редактор, то оно, как правило, будет иметь какой-то цикл обработки событий, который вызывает select или poll, и может наблюдать ваш дескриптор файла inotify для событий.

Использование inotify, как правило, предпочтительнее stat, поскольку вы сразу получаете уведомления и не тратите время и опросы дискового ввода-вывода, когда файл не изменяется. Недостатком является то, что он может не работать через NFS или другие сетевые файловые системы и не является переносимым.

На этой странице в IBM Developerworks приведен пример кода C, а справочная страница является окончательной ссылкой.

5 голосов
/ 22 января 2009

используйте stat функцию. Пример на странице.

3 голосов
/ 22 января 2009

Текстовые редакторы, которые я видел в Windows и Linux, сделали это одинаково: они не проверяют, действительно ли файл изменился, они просто смотрят на его статистику mtime.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...