utimes - изменить последнее время доступа и изменения к inode
utimes(2)
изменить последнее время доступа и изменения к inode
Other Alias
utime
ОБЗОР
#include <sys/types.h>
#include <utime.h>
int utime(const char *filename, const struct utimbuf *times);
#include <sys/time.h>
int utimes(const char *filename, const struct timeval times[2]);
ОПИСАНИЕ
Замечание: современным приложениям лучше использовать интерфейсы,
описанные в
utimensat(2).
Системный вызов utime() изменяет время доступа и изменения у inode,
указанного в filename на значения полей actime и modtime из
структуры times, соответственно.
Если значение times равно NULL, то время доступа и изменения файла
устанавливаются в текущее время.
Изменение временных меток разрешено если: процесс имеет соответствующие
права или эффективный пользовательский идентификатор равен пользовательскому
идентификатору файла, или значение times равно NULL и процесс имеет права
на запись в файл.
Структура utimbuf выглядит так:
struct utimbuf {
time_t actime; /* время доступа */
time_t modtime; /* время изменения */
};
Системный вызов utime() позволяет указывать временные метки с точностью
до 1 секунды.
Системный вызов utimes() выполняет подобное действие, но аргумент
times указывает на массив, а не на структуру. Элементы массива
представляют собой структуры timeval, с помощью которых можно указывать
временные метки с точностью до 1 микросекунды . Структура timeval:
struct timeval {
long tv_sec; /* секунды */
long tv_usec; /* микросекунды */
};
В times[0] задаётся новое время доступа, а в times[1] новое время
изменения. Если значение times равно NULL, то аналогично utime(),
время доступа и изменения файла устанавливаются в текущее время.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
При успешном выполнении возвращается 0. В случае ошибки возвращается -1, а
errno устанавливается в соответствующее значение.
ОШИБКИ
EACCES
Запрещён поиск в одном из каталогов пути path (см. также
path_resolution(7)).
EACCES
Значение times равно NULL, эффективный пользовательский идентификатор
вызывающего процесса не совпадает с владельцем файла, вызывающий не имеет
права на запись в файл, и у вызывающего нет привилегий (Linux: не имеет
мандата CAP_DAC_OVERRIDE или CAP_FOWNER).
ENOENT
Файл filename не существует.
EPERM
Значение times не равно NULL, эффективный пользовательский идентификатор
вызывающего процесса не совпадает с владельцем файла и у вызывающего нет
привилегий (Linux: не имеет мандата CAP_FOWNER).
EROFS
path располагается на файловой системе, доступной только для чтения.
СООТВЕТСТВИЕ СТАНДАРТАМ
utime(): SVr4, POSIX.1-2001. В POSIX.1-2008 вызов
utime() помечен как
устаревший.
utimes(): 4.3BSD, POSIX.1-2001.
ЗАМЕЧАНИЯ
В Linux нельзя изменять временные метки у недосягаемых (immutable) файлов
или задавать временные метки, отличные от текущего времени для файлов, в
которые можно только дописывать.