Книга: Разработка приложений в среде Linux. Второе издание

11.3.6. Изменение временных меток файла

11.3.6. Изменение временных меток файла

Владелец файла может изменять mtime и atime файла на любое желаемое значение. Это делает такие метки бесполезными для целей аудита, но позволяет инструментам архивирования вроде tar и cpio сбрасывать временные метки файлов в то значение, когда они были архивированы. Метка ctime изменяется, когда обновляются mtime и atime, поэтому tar и cpio не могут восстановить их.

Существуют два способа изменения этих меток: utime() и utimes(). utime() появилась в System V, после чего была адаптирована POSIX, в то время как utimes() пришла из BSD. Обе функции эквивалентны; они отличаются только способом, каким указываются новые временные метки.

#include <utime.h>
int utime(const char *pathname, struct utimbuf *buf);
#include <sys/time.h>
int utimes(const char *pathname, struct timeval *tvp);

Версия POSIX, utime(), принимает struct utimbuf, которая определена в <utime.h>, как показано ниже.

struct utimbuf {
 time_t асtime;
 time_t modtime;
};
utimes()
из BSD вместо этого передает новое значение atime и mtime через struct timeval, которая определена в <sys/time.h>.

struct timeval {
 long tv_sec;
 long tv_usec;
};

Элемент tv_sec содержит новое значение atime;tv_usec содержит новое значение mtime для utimes().

Если каждой из функций вторым параметром передать NULL, то обе временные метки должны быть установлены в текущее время. Новые значения atime и mtime устанавливаются в секундах, прошедших с начала эры (так же, как значение, возвращаемое time()), как определено в главе 18.

Оглавление книги


Генерация: 5.033. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз