utime(2)

ИМЯ
utime, utimes - изменить последнее время доступа и изменения к inode

LIBRARY
Standard C library (libc, -lc)

СИНТАКСИС
#include <utime.h>

int utime(const char *filename,
          const struct utimbuf *_Nullable times);

#include <sys/time.h>

int utimes(const char *filename,
          const struct timeval times[_Nullable 2]);

ОПИСАНИЕ
Замечание: современным приложениям лучше использовать интерфейсы, описанные в utimensat(2).

The utime() system call changes the access and modification times of the inode specified by filename to the actime and modtime fields of times respectively. The status change time (ctime) will be set to the current time, even if the other time stamps don't actually change.

Если значение 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(), время доступа и изменения файла устанавливаются в текущее время.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
On success, zero is returned. On error, -1 is returned, and errno is set to indicate the error.

ОШИБКИ

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) файлов или задавать временные метки, отличные от текущего времени для файлов, в которые можно только дописывать.

СМ. ТАКЖЕ
chattr(1), touch(1), futimesat(2), stat(2), utimensat(2), futimens(3), futimes(3), inode(7)

ПЕРЕВОД
Русский перевод этой страницы руководства был сделан Azamat Hackimov <azamat.hackimov@gmail.com>, Dmitriy Ovchinnikov <dmitriyxt5@gmail.com>, Dmitry Bolkhovskikh <d20052005@yandex.ru>, Katrin Kutepova <blackkatelv@gmail.com>, Yuri Kozlov <yuray@komyakino.ru> и Иван Павлов <pavia00@gmail.com>

Этот перевод является бесплатной документацией; прочитайте Стандартную общественную лицензию GNU версии 3 (https://www.gnu.org/licenses/gpl-3.0.html) или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.

Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на man-pages-ru-talks@lists.sourceforge.net.