Программирование в стандарте POSIX


Пример 12.29


/* * * * * * * * * * * * * * * * * * * * * * * * * */

/* Программа отслеживает изменение размера файла, */

/* заданного как аргумент командной строки */

/* * * * * * * * * * * * * * * * * * * * * * * * * */

#include

#include

#include

#include

#include

static time_t lt_mod = 0; /* Время последнего изменения файла */

static struct stat st_buf; /* Данные о файле */

/* Функция начальной обработки файла */

static void proc_init (const char *path) {

fprintf (stderr, "Данные о размере файла %s\n", path);

fprintf (stderr, "Время изменения Размер\n");

}

/* Функция проверки, нужно ли обрабатывать файл */

/* Результат > 0 - нужно */

/* 0 - не нужно */

/* < 0 - ошибка */

static int check_mod (const char *path) {

if (stat (path, &st_buf) != 0) {

perror ("STAT");

return (-1);

}

if (st_buf.st_mtime != lt_mod) {

/* Файл изменился и, следовательно, нуждается в обработке */

lt_mod = st_buf.st_mtime;

return (1);

}

return 0;

}

/* Функция обработки файла. */

/* Выведем время последнего изменения и текущий размер */

static void proc_mod (void) {

char dtbuf [LINE_MAX]; /* Буфер для данных о времени */

(void) strftime (dtbuf, sizeof (dtbuf), "%c", localtime (&lt_mod));

fprintf (stderr, "%s %ld\n", dtbuf, st_buf.st_size);

}

int main (int argc, char *argv []) {

int res;

if (argc != 2) {

fprintf (stderr, "Использование: %s файл\n", argv [0]);

return (1);

}

proc_init (argv [1]);

while (1) {

if ((res = check_mod (argv [1])) > 0) {

proc_mod ();

} else if (res < 0) {

return (res);

}

sleep (1);

}

return 0;

}




Начало  Назад  Вперед