LINUX.ORG.RU

обновление файла


0

0
Процессу нужно отслеживать обновление файла. Нужно чтоб процесс сначала вычитывал файл, что-то потом делал, опять вычитывал и засыпал, если файл не изменялся, но как только файл обновился - просыпался. Так вот можно ли, чтоб просыпание происходило автоматом, без постоянного вычитывания и сравнения с предыдущей копией ? Язык - С.
anonymous
Копать в сторону inotify
Legioner ★★★★★
()
см. libfam (file alteration monitor). Эта библиотека использует различные способы слежения за файлом (в т.ч. inotify/dnotify) и предоставляет однообразный интерфейс к ним.
mo3r
()
Ответ на: комментарий от mo3r
int fd;
struct stat stbuf;
time_t old_time = 0;

if ((fd = open("file", 0)) == -1)
error("can't open %s", 'file');
fstat(fd, &stbuf);
while (stbuf.st_mtime != old_time) {
old_time = stbuf.st_mtime;
sleep(60);
fstat(fd, &stbuf);
}
kto_tama ★★★★★
()
Ответ на: комментарий от Deleted
> Кривой костыль. Как уже сказали выше - inotify, libfam, etc...

это работающее простое стандартное решение. Чтобы предпочесть inotify/libfam нужны обоснования того что это действительно нужно -- это решать топикстартеру

dilmah ★★★★★
()
Если "обновление" файла это дозапись в его конец (лог-файлы), то можно воспользоваться select()
no-dashi ★★★★★
()
select() ?? Вроде он это самое и делает.. Ещё есть poll() и epoll().
lv ★★
()
Ответ на: комментарий от no-dashi
> Если "обновление" файла это дозапись в его конец

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

anonymous
()
Ответ на: комментарий от anonymous
> не самый лучший способ изменеия параметров проги на лету ?

а если будет ошибка в конфиге или будет промежуточное сохранение? :)

Делай как все, перехватывай SIGHUP

true_admin ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.