Определить, был ли изменен открытый файл в C

Есть ли способ определить, был ли открытый файл изменен в POSIX? Точнее, как я могу реализовать is_modified() ниже?

FILE *f = fopen("myfile", "r+");

// do various things with f

if (is_modified(f))
    foo(f);

Чтобы обеспечить некоторый контекст, я пишу модуль на C, который для каждого файла должен хранить его хэш в таблице. Интерфейс предоставляет обертки для fopen() и fclose(), и хэширование может выполняться при закрытии файла. Я нашел несколько подходов для этого, но ни один из них не является настолько эффективным, чистым или защищенным от ошибок, как мне бы хотелось:

  • Вычисление хэша каждого файла, открытого для записи.
  • fflush(f) и проверка, не изменилась ли временная метка.
  • Предоставить обертки вокруг fwrite(), fprintf() и т.д.

Любые предложения?

8
задан jweyrich 25 December 2011 в 06:21
поделиться