st_mtime
st_ctime
Значение time_t
Значения time_t
time_t и то, что оно представляет секунды с начала Эпохи.Системный вызов utime()
#include
#include
int utime(const char *filename, struct utimbuf *buf);
Структура utimbuf
struct utimbuf {
time_t actime; /* время доступа */
time_t modtime; /* время изменения */
};
При успешном вызове возвращается 0, в противном случае возвращается -1. Если buf
NULL, система устанавливает время доступа и время изменения равным текущему времени.Чтобы изменить только одну временную отметку, используйте оригинальное значение из struct stat
/* Для краткости проверка ошибок опущена */
struct stat sbuf;
struct utimbuf ut;
time_t now;
time(&now); /* Получить текущее время дня, см. след. главу */
stat("/some/file", &sbuf); /* Заполнить sbuf */
ut.actime = sbuf.st_atime; /* Время доступа без изменений */
ut.modtime = now - (24 * 60 * 60);
/* Установить modtime на 24 часа позже */
utime("/some/file", &ut); /* Установить значения */
Вы можете спросить себя: «Почему может понадобиться кому-нибудь изменять времена доступа и изменения файла?» Хороший вопрос.
Чтобы на него ответить, рассмотрите случай программы, создающей дублирующие архивы, такой, как tar
cpio. Эти программы должны прочесть содержание файла, чтобы заархивировать его. Чтение файла, конечно, изменяет время доступа к файлу.Однако, этот файл, возможно, не читался человеком в течение 10 лет. Некто, набрав 'ls -lu
utime().Аналогичным образом, рассмотрите случай архивирующей программы,
Однако полезнее, когда вновь созданный файл
ЗАМЕЧАНИЕ
. В новом коде вы можете захотеть использовать вызовutimes() (обратите внимание на s в имени), который описан далее в книге, в разделе 14.3.2 «Файловое время в микросекундах: utimes()»5.5.3.1. Подделка utime(file, NULL)
Некоторые более старые системы не устанавливают значения времени доступа и изменения равным текущему времени, когда второй аргумент utime()
NULL. Однако код более высокого уровня (такой, как GNU touch) проще, если он может полагаться на один стандартизованный интерфейс.Поэтому библиотека GNU Coreutils содержит замещающую функцию для utime()
Замещающая функция находится в файле lib/utime.c
24 #include
25
Бьёрн Страуструп , Ирина Сергеевна Козлова , Бьерн Страуструп , Валерий Федорович Альмухаметов
Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT