utime(2)

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

БИБЛИОТЕКА
Стандартная библиотека языка C (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(), время доступа и изменения файла устанавливаются в текущее время.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
При успешном выполнении возвращается 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 располагается на файловой системе, доступной только для чтения.

СТАНДАРТЫ
POSIX.1-2008.

ИСТОРИЯ

utime()
    SVr4, POSIX.1-2001. POSIX.1-2008 помечает его как устаревший.

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> и Kirill Rekhov <krekhov.dev@gmail.com>

Этот перевод является свободной программной документацией; он распространяется на условиях общедоступной лицензии GNU (GNU General Public License - GPL, https://www.gnu.org/licenses/gpl-3.0.html версии 3 или более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.

Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом разработчику(ам) по его(их) адресу(ам) электронной почты или по адресу списка рассылки русских переводчиков (<debian-l10n-russian@lists.debian.org>).