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 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.