Utime изменить время модификации файла


Содержание

Utime изменить время модификации файла

#include /* определения констант AT_* */
#include

int utimensat(int dirfd, const char *pathname,
const struct timespec times[2], int flags);
int futimens(int fd, const struct timespec times[2]);

Требования макроса тестирования свойств для glibc (см. feature_test_macros(7)):

Начиная с glibc 2.10: _XOPEN_SOURCE >= 700 || _POSIX_C_SOURCE >= 200809L До glibc 2.10: _ATFILE_SOURCE

Начиная с glibc 2.10: _XOPEN_SOURCE >= 700 || _POSIX_C_SOURCE >= 200809L До glibc 2.10: _GNU_SOURCE

ОПИСАНИЕ

В вызове utimensat() файл задаётся в pathname по имени. В вызове futimens() файл указывается в виде открытого файлового дескриптора в fd.

У обоих вызовов новые временные метки файла указываются в массиве times: в times[0] задаётся новое «время последнего доступа» (atime); в times[1] задаётся новое «время последнего изменения» (mtime). В каждом элементе times указывается время в виде количества секунд и наносекунд, прошедших с начала эпохи (1970-01-01 00:00:00 +0000 (UTC)). Эта информация представляет собой структуру следующего формата:

Обновлённые временные метки файла устанавливаются в самое большое значение, поддерживаемое файловой системой, но не больше чем указанное время.

Если в поле tv_nsec одной из структур timespec указано специальное значение UTIME_NOW, то соответствующая временная метка файла устанавливается в значение текущего времени. Если в поле tv_nsec одной из структур timespec указано специальное значение UTIME_OMIT, то соответствующая временная метка файла не изменяется. В обоих случаях значение поля tv_sec игнорируется.

Если значение times равно NULL, то значение обеих временных меток становится равным текущему времени.

Права доступа

Чтобы установить временные метки файла равными не текущему времени (т. е., значение times не равно NULL, или оба значения поля tv_nsec не равны UTIME_NOW или UTIME_OMIT) требуется выполнение условия 2 или 3.

Если в обоих значениях поле tv_nsec равно UTIME_OMIT, то проверки владения файлом и права доступа к нему не выполняются, и временные метки файла не изменяются, но всё равно могут проверяться другие условия возникновения ошибок.

Особенности utimensat()

Если в pathname задан относительный путь и dirfd равно специальному значению AT_FDCWD, то pathname рассматривается относительно текущего рабочего каталога вызывающего процесса (как utimes(2)).

Если в pathname задан абсолютный путь, то dirfd игнорируется.

Значение поля flags представляет собой битовую маску и может равняться 0 или содержать следующую константу (определена в ):

AT_SYMLINK_NOFOLLOW Если pathname указывает на символьную ссылку, то обновляются временные метки ссылки, а не файла, на который она ссылается.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

ОШИБКИ

ВЕРСИИ

Поддержка futimens() появилась в glibc 2.6.

АТРИБУТЫ

Описание терминов данного раздела смотрите в attributes(7).

Интерфейс Атрибут Значение
utimensat(), futimens() безвредность в нитях безвредно (MT-Safe)

СООТВЕТСТВИЕ СТАНДАРТАМ

ЗАМЕЧАНИЯ

В Linux, временные метки нельзя изменять у файлов, помеченных как неизменяемые (immutable), а у файлов, помеченных как только для добавления, можно изменить метку только на значение текущего времени (это соответствует сложившемуся исторически поведению в Linux вызовов utime(2) и utimes(2)).

В Linux, futimens() представляет собой библиотечную функцию на основе системного вызова utimensat(). Для этого в Linux-версии системного вызова utimensat() реализовано нестандартное свойство: если значение pathname равно NULL, то вызов изменяет временные метки файла на который ссылается файловый дескриптор dirfd (который может указывать на файл любого типа). С помощью этого свойства вызов futimens(fd, times) реализован как:

Если оба поля tv_nsec равны UTIME_OMIT, то вызов utimensat() реализации Linux завершается без ошибки, даже, если файл, на который ссылается dirfd и pathname, не существует.

Установить время последней модификации файла

В POSIX есть утилита touch. В Досе (у Борланда) одноименная утилита. В борландских Си функция setftime А вот в Qt (и mingw) я ничего подобного не нашел. Смотрел в QFileInfo, QFile, QIODevice. Гугл тоже молчит. Возможно, искал плохо. А нужна позарез.

Добавлено через 26 минут
Вселяет надежду то, что все архиваторы при разархивации восстанавливают время модификации. В том числе и Hamster, который, судя по составу библиотек, сделан на Qt.

Добавлено через 14 минут
Кстати, как ведет себя в этом смысле метод QFile::copy? Если он сохраняет временные параметры копируемого файла, мне бы этого на первых порах было достаточно.
С утра попробую.

28.11.2015, 00:37

Установить дату последней модификации файла
При автоматическом обновлении системы я ориентируюсь на даты последней модификации файлов.

Рекурсивная сортировка каталогов/файлов, время последней модификации каталога
Я хочу написать скрипт, который рекурсивно пробегает все элементы (каталоги и файлы) открытого.

Дата последней модификации файла
Столкнулся с проблемой. Не всегда можно получить правильную дату модификации файла, используя.

Измененение даты последней модификации файла
Нужно дате изменения присвоить дату создания. Вот кусок кода, подскажите, пожалуйста, что я делаю.

Илон Маск рекомендует:  word-break в CSS

Изменить время модификации файла
Есть файл. Любой файл. У него есть дата создания и дата изменения. Где содержится информация об.

eio_utime — Изменяет дату и время последней модификации и доступа к файлу

(PECL eio >= 0.0.1dev)

eio_utime — Изменяет дату и время последней модификации и доступа к файлу

Описание

Список параметров

Время последнего доступа

Время последнего изменения

Приоритет запросов: EIO_PRI_DEFAULT , EIO_PRI_MIN , EIO_PRI_MAX , или NULL . Если передан NULL , то pri устанавливается в EIO_PRI_DEFAULT .

Функция callback вызывается при завершении запроса. Она должна удовлетворять следующему прототипу:

является пользовательскими данными, переданными в запросе.

содержит результирующее значение, зависящее от запроса; обычно это значение, возвращаемое соответствующим системным вызовом.

является опциональным запрашиваемым ресурсом, который может использоваться с такими функциями как eio_get_last_error()

Произвольная переменная, передаваемая в callback -функцию.

Возвращаемые значения

eio_utime() возвращает указатель на запрос при успехе или FALSE при ошибке.

Настройка создания или изменения временных меток

Используя utimes , futimes , futimens и т. Д., Можно установить метки времени доступа и модификации файла.

Время модификации — это время последнего изменения данных файла. Аналогично, «ctime» или время изменения — это последние атрибуты времени файла, такие как разрешения, были изменены. (Linux / POSIX поддерживает три метки времени: mtime и ctime, которые уже обсуждались, и «atime» или время доступа.)

Есть ли функция для установки меток времени изменения? (Где «изменение» — это атрибут модификации или «ctime», а не время модификации «mtime».) (Я понимаю циклическую природу желания изменить метку времени изменения, но думаю, что программное обеспечение для архивации — было бы неплохо точно восстановить файл как это было.)

Есть ли какие-либо функции для создания меток времени? (Я понимаю, что ext2 не поддерживает это, но мне было интересно, поддерживает ли Linux те файловые системы, которые его поддерживают.)

Если это невозможно, то почему это не так?

4 ответа

Для ext2/3 и, возможно, для ext4 вы можете сделать это с помощью инструмента debugfs , предполагая, что вы хотите изменить ctime файла /tmp/foo который находится на диске /dev/sda1 мы хотим установить ctime на 201001010101 что означает 01 января 2010 года, время 01:01:

Предупреждение: диск должен быть размонтирован перед этой операцией

Информация взята из блога Command Line Kung Fu .

У меня была похожая проблема, и я написал свой ответ здесь.

По сути, есть два варианта:

  1. Небольшое изменение в ядре (код включен в ссылку)
  2. Измените системные часы на нужное время, коснитесь файла, затем восстановите текущее время. (сценарий оболочки для этого включен в ссылку).

Согласно http://lists.gnu.org/archive/html/coreutils/2010-08/msg00010.html ctime нельзя подделать (по крайней мере, оно не предназначено для подделки):

POSIX говорит, что atime и mtime устанавливаются пользователем на произвольное время с помощью семейства системных вызовов utimensat (), но ctime должно незаметно отслеживать текущее время любого действия, которое изменяет метаданные или содержимое файла.

Если вам просто нужно изменить ctime файла для некоторого тестирования / отладки, может быть полезен bindfs . Это файловая система FUSE, которая монтирует один каталог в другое место и может выполнять некоторые преобразования атрибутов файла. С опцией —ctime-from-mtime ctime каждого файла совпадает с его временем mtime, которое вы можете установить с помощью touch -t .

Самый простой способ:

Я попробовал это на Windows 7, и мне удалось изменить все три метки времени. Команда stat в linux показывает, что все три метки времени изменены.

QNX.ORG.RU

Разработка => Программирование под QNX => Тема начата: syphilis777 от Сентября 28, 2009, 02:09:01 pm

Как можно изменить атрибуты файла (ctime, mtime и т.д. возвращаемые stat()), на желаемые? В хелпе искал — не нашел.

Как можно изменить атрибуты файла (ctime, mtime и т.д. возвращаемые stat()), на желаемые? В хелпе искал — не нашел.

где на нее исходники можно взять ?

Как данную процедуру проворачивает ср?

Нет в интерфейсе менеджера ресурсов запроса для установления конкретного значения времён файла. Ферштейн?

touch просто делает обращение к файлу, чтоб у него установилось текущее время модификации.
Задание произвольного времени не предусмотрено архитектурой.

Нет в интерфейсе менеджера ресурсов запроса для установления конкретного значения времён файла. Ферштейн?

touch просто делает обращение к файлу, чтоб у него установилось текущее время модификации.
Задание произвольного времени не предусмотрено архитектурой.

Как можно изменить атрибуты файла (ctime, mtime и т.д. возвращаемые stat()), на желаемые? В хелпе искал — не нашел.

Текущее время и время модификации файла

Как работает ctime а также mtime отличаются для файла в find команда? Например, будет

дать тот же результат или нет?

1 ответ

CTime

ctime — это время изменения индекса или файла. Время ctime обновляется при изменении атрибутов файла, например при смене владельца, изменении разрешения или перемещении файла в другую файловую систему, но также будет обновляться при изменении файла.

время изменения

mtime — время изменения файла. Mtime обновляется, когда вы изменяете файл. Всякий раз, когда вы обновляете содержимое файла или сохраняете файл, mtime обновляется. В большинстве случаев ctime и mtime будут одинаковыми, если только не обновляются только атрибуты файла. В этом случае обновляется только ctime

5.5.3. Изменение временных отметок: utime()

Похожие главы из других книг

Нанесение отметок возвышений на разрезы/фасады

Нанесение отметок возвышений на разрезы/фасады Инструмент построения отметок возвышений (уровней) на разрезах/фасадах (кнопка находится в составе окна настройки параметров линейных размеров. При активизации данного инструмента окно настройки параметров линейных

Построение отметок возвышений на разрезах / фасадах

Построение отметок возвышений на разрезах / фасадах Отметки возвышений на разрезах / фасадах строятся точно так же, как и при построении линейных размерных цепей. Для этого необходимо выполнить следующие действия.1. Спроектируйте двухэтажный дом, который похож на

Нанесение отметок возвышений на план этажа

Нанесение отметок возвышений на план этажа Для отображения отметок возвышений на планах этажей в ArchiCAD имеется отдельный инструмент, вызываемый нажатием кнопки Level Dimension (Отметки уровня) палитры инструментов. При его активизации на информационной палитре появляются

Илон Маск рекомендует:  Софт в помощь программистам на PHP

Настройка параметров отметок возвышений на плане этажа

Настройка параметров отметок возвышений на плане этажа По сравнению с ранее рассмотренными инструментами в данном окне изменено содержимое набора видов маркера, появилось поле установки угла поворота маркера и флажок Label Frame (Рамка отметки), установка которого

Построение отметок возвышений на плане этажа

Построение отметок возвышений на плане этажа Для построения отметки возвышения необходимо выполнить следующие действия.1. Активизировать инструмент Level Dimension (Отметки уровня).2. Настроить параметры отметки возвышения.3. Выбрать уровень отсчета и способ привязки точки

Удаление ненужных временных файлов с жесткого диска

Удаление ненужных временных файлов с жесткого диска В результате некорректного завершения приложений на жестком диске часто остаются «бесхозные» временные файлы (с расширением tmp), которые затем приходится удалять вручную. Весьма удобно было бы удалять все такие файлы

Именование временных файлов

Именование временных файлов Следующая функция создает имена для временных файлов. Файл может находиться в любом заданном каталоге, и его имя должно быть уникальным.Функция GetTempFileName предоставляет уникальное имя файла с расширением .tmp, используя указанный путь доступа, и

10.1.10. Получение и установка временных штампов

10.1.10. Получение и установка временных штампов С каждым файлом на диске связано несколько временных штампов (в разных операционных системах они различны). Ruby понимает три таких штампа: время модификации (когда в последний раз было изменено содержимое файла), время доступа

Функционирование временных серверов

Функционирование временных серверов Работа временных серверов начинается с получения сведений о времени от официальных источников. Эти сведения получаются путем считывания показаний атомных часов, приема специальных радиосигналов и т.д. Служба GPS (Global Positioning System —

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

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

22.3.5. Создание временных файлов

22.3.5. Создание временных файлов Довольно часто в программах применяются временные файлы. Система Linux даже предусматривает для этой цели особые каталоги (/tmp и /var/tmp). К сожалению, использование временных файлов в безопасном режиме — дело очень ненадежное. Лучшим решением

5.5.3.1. Подделка utime(file, NULL)

5.5.3.1. Подделка utime(file, NULL) Некоторые более старые системы не устанавливают значения времени доступа и изменения равным текущему времени, когда второй аргумент utime() равен NULL. Однако код более высокого уровня (такой, как GNU touch) проще, если он может полагаться на один

12.3.1. Создание временных имен файлов (плохо)

12.3.2. Создание и открывание временных файлов (хорошо)

Безопасность временных таблиц

Безопасность временных таблиц Чтобы предотвратить возможность использования мощных возможностей временных таблиц в неблаговидных целях, на них введены ограничения прав доступа — по умолчанию таблицы видимы и могут изменяться только владельцем базы данных или SYSDBA. В

26.1.2. Создание уникальных временных файлов

26.1.2. Создание уникальных временных файлов При рассмотрении специальных переменных уже обсуждалась переменная $$ Она содержит ID или номер процесса, выполняющегося в текущий момент. Эти сведения применяются при создании временных файлов в текущем сценарии, поскольку ID

Utime изменить время модификации файла

Исторически так сложилось, что man-страница команды ls и встроенная помощь по команде ls —help не содержат сведений о том, как посмотреть разные времена действий с файлами. Точнее, сведения эти неполные.

На файловой системе extX (где X- это число) обычно хранится следующая временн а я информация:

  • crtime (create time, не путать с ctime! ) — время создания файла
  • mtime (modification time) — время последнего изменения файла, каталога

  • atime — (access time) — время последнего доступа к файлу, каталогу
  • ctime — (change time, не путать с crtime! ) — время последнего изменения атрибутов файла, каталога (данных из в inode-области)
  • dtime (delete time) — время удаления файла

Однако документация на ls говорит, что можно получить следующие сведения:

—time=WORD with -l, show time as WORD instead of default

modification time: atime or access or use (-u)

ctime or status (-c); also use specified time

as sort key if —sort=time

Отсюда мы имеем, что mtime (время модификации) отображается в команде ls -l по-умолчанию:

drwxr-xr-x 2 www-data www-data 4096 May 1 2020 helpers

-rw-rw-rw- 1 www-data www-data 5871 May 1 2020 Plugin_Articles.php

-rw-rw-rw- 1 www-data www-data 241 Sep 3 2010 Plugin_Empty.php

-rw-rw-rw- 1 www-data www-data 3077 May 1 2020 Plugin_Gallery.php

-rw-rw-rw- 1 www-data www-data 10318 Apr 30 2020 Plugin_Guestbook_Captcha.php

-rw-rw-rw- 1 www-data www-data 12054 Mar 7 14:06 Plugin_Guestbook.php

Время последнего доступа к файлу/каталогу atime можно посмотреть командой:

drwxr-xr-x 2 www-data www-data 4096 Mar 9 05:02 helpers

-rw-rw-rw- 1 www-data www-data 5871 Mar 9 05:02 Plugin_Articles.php

-rw-rw-rw- 1 www-data www-data 241 Mar 9 05:02 Plugin_Empty.php

-rw-rw-rw- 1 www-data www-data 3077 Mar 9 05:02 Plugin_Gallery.php

-rw-rw-rw- 1 www-data www-data 10318 Mar 9 05:02 Plugin_Guestbook_Captcha.php

-rw-rw-rw- 1 www-data www-data 12054 Mar 9 05:02 Plugin_Guestbook.php

Здесь видно, что срабатывало ночное архивирование в 5:02. А если просто открыть один файл на просмотр, то после такого действия получим:

drwxr-xr-x 2 www-data www-data 4096 Mar 9 05:02 helpers

-rw-rw-rw- 1 www-data www-data 5871 Mar 10 10:31 Plugin_Articles.php

-rw-rw-rw- 1 www-data www-data 241 Mar 9 05:02 Plugin_Empty.php

-rw-rw-rw- 1 www-data www-data 3077 Mar 9 05:02 Plugin_Gallery.php

-rw-rw-rw- 1 www-data www-data 10318 Mar 9 05:02 Plugin_Guestbook_Captcha.php

-rw-rw-rw- 1 www-data www-data 12054 Mar 9 05:02 Plugin_Guestbook.php

Время последнего изменения атрибутов файла/каталога (изменений в inode) ctime узнается так:

drwxr-xr-x 2 www-data www-data 4096 May 8 2020 helpers

-rw-rw-rw- 1 www-data www-data 5871 May 8 2020 Plugin_Articles.php

-rw-rw-rw- 1 www-data www-data 241 May 8 2020 Plugin_Empty.php

-rw-rw-rw- 1 www-data www-data 3077 May 8 2020 Plugin_Gallery.php

-rw-rw-rw- 1 www-data www-data 10318 May 8 2020 Plugin_Guestbook_Captcha.php

-rw-rw-rw- 1 www-data www-data 12054 Mar 7 14:06 Plugin_Guestbook.php

Но у нас еще остались crtime и dtime . Как их узнать? Можно попробовать команду:

# ls -l —time=crtime

ls: invalid argument ‘crtime’ for ‘—time’

Valid arguments are:

— ‘atime’, ‘access’, ‘use’

Ошибка. Но вот что интересно. Оказывается, команда ls поддерживает не только atime , ctime и mtime (по умолчнию). Есть еще какие-то загадочные access , use , status . И что они обозначают, в документации ls не написано. И кроме того, непонятно как посмотреть crtime и dtime .

Илон Маск рекомендует:  Картинки на сайте

Долгие ковыряния в интернете показали, что, в Linux все очень запутано. Например, в ext3 время создания crtime вообще не хранится. А в ext4 хранится, но его невозможно напрямую посмотреть через ls. Для ext4 рекомендуют применять следующий трюк:

1. Узнать номер i-ноды файла через опцию -i , например:

385631 drwxr-xr-x 2 www-data www-data 4096 May 1 2020 helpers

385633 -rw-rw-rw- 1 www-data www-data 5871 May 1 2020 Plugin_Articles.php

385634 -rw-rw-rw- 1 www-data www-data 241 Sep 3 2010 Plugin_Empty.php

385629 -rw-rw-rw- 1 www-data www-data 3077 May 1 2020 Plugin_Gallery.php

385638 -rw-rw-rw- 1 www-data www-data 10318 Apr 30 2020 Plugin_Guestbook_Captcha.php

385637 -rw-rw-rw- 1 www-data www-data 12054 Mar 7 14:06 Plugin_Guestbook.php

2. Найти информацию об i-ноде данного файла:

# debugfs -R ‘stat ‘ /dev/sda1

Inode: 385633 Type: regular Mode: 0666 Flags: 0x80000

Generation: 3970661518 Version: 0x00000000:00000001

User: 33 Group: 33 Size: 5871

File ACL: 0 Directory ACL: 0

Links: 1 Blockcount: 16

Fragment: Address: 0 Number: 0 Size: 0

ctime: 0x572f7053:875a9d88 — Sun May 8 19:58:59 2020

atime: 0x58c25640:80cad680 — Fri Mar 10 10:31:12 2020

mtime: 0x57260da3:00000000 — Sun May 1 17:07:31 2020

crtime: 0x572f6fa8:65ca9a70 — Sun May 8 19:56:08 2020

Size of extra inode fields: 28

Да, номер ноды вот так, с угловыми скобками, и надо писать. В полученной информации видно время crtime . И что интересно, оно почти совпадает с временем ctime .

Почему оно совпадает? Потому что с момента создания файла никакие атрибуты файла не менялись. Почему почти совпадает? Могу предположить, что при копировании файлов файлы сначала копируются, а потом им назначаются атрибуты или устанавливается содержимое. Вот, например, какое время у файла /etc/networks:

ctime: 0x56a233b8:3ac960a0 — Fri Jan 22 16:50:48 2020

atime: 0x58c264eb:43bd7fb8 — Fri Mar 10 11:33:47 2020

mtime: 0x56a233b8:3ac960a0 — Fri Jan 22 16:50:48 2020

crtime: 0x56a233b0:54892ca0 — Fri Jan 22 16:50:40 2020

Здесь видно, что время создания crtime — самое первое на временной шкале. Остальные времена отличаются на секунды.

Теперь, если поменять, например, права доступа файла Plugin_Articles.php , то можно увидеть:

Inode: 385633 Type: regular Mode: 0755 Flags: 0x80000

Generation: 3970661518 Version: 0x00000000:00000001

User: 33 Group: 33 Size: 5871

File ACL: 0 Directory ACL: 0

Links: 1 Blockcount: 16

Fragment: Address: 0 Number: 0 Size: 0

ctime: 0x58c262ee:19ffcde0 — Fri Mar 10 11:25:18 2020

atime: 0x58c25640:80cad680 — Fri Mar 10 10:31:12 2020

mtime: 0x57260da3:00000000 — Sun May 1 17:07:31 2020

crtime: 0x572f6fa8:65ca9a70 — Sun May 8 19:56:08 2020

Size of extra inode fields: 28

Теперь crtime и ctime содержат совсем разные даты. Так и должно быть.

Хинт! Можно не долбаться с i-node, а воспользоваться просто именем файла в команде debugfs:

debugfs -R ‘stat /home/user/file1’ /dev/sda1

Ищем параметр crtime — это и есть дата создания файла.

Остался вопрос по dtime. Для того чтобы узнать дату удаления файла нужно знать inod удаленного файла. Все, в принципе, уже делали выше по тексту:

1. смотрим номер inode (первая цифра)

ls -li /home/user/file1

3. Указываем inode вместо имени файла

sudo debugfs -R ‘stat ‘ /dev/sda1

И видим что появился еще один параметр dtime который указывает время удаления файла.

И напоследок, полезная команда:

Эта команда, как и ls, выведет информацию о файлах в текущем каталоге. Но информация будет очень полной:

Размер: 4096 Блоков: 8 Блок В/В: 4096 каталог

Устройство: fe01h/65025d Inode: 18093704 Ссылки: 4

Доступ: (0755/drwxr-xr-x) Uid: ( 1000/ xi) Gid: ( 1000/ xi)

Доступ: 2020-11-11 08:40:14.304086738 +0300

Модифицирован: 2020-10-27 13:58:58.471802462 +0300

Изменён: 2020-10-27 13:58:58.471802462 +0300

Размер: 4096 Блоков: 8 Блок В/В: 4096 каталог

Устройство: fe01h/65025d Inode: 18351666 Ссылки: 4

Доступ: (0755/drwxr-xr-x) Uid: ( 1000/ xi) Gid: ( 1000/ xi)

Доступ: 2020-02-27 15:11:57.919149521 +0300

Модифицирован: 2020-02-27 15:11:57.919149521 +0300

Изменён: 2020-02-27 15:11:57.919149521 +0300

Размер: 4096 Блоков: 8 Блок В/В: 4096 каталог

Устройство: fe01h/65025d Inode: 17172618 Ссылки: 5

Доступ: (0755/drwxr-xr-x) Uid: ( 1000/ xi) Gid: ( 1000/ xi)

Доступ: 2020-11-11 08:40:12.408086752 +0300

Модифицирован: 2020-09-22 16:14:05.691297459 +0300

Изменён: 2020-10-27 13:58:38.595791445 +0300

Размер: 4096 Блоков: 8 Блок В/В: 4096 каталог

Устройство: fe01h/65025d Inode: 17041798 Ссылки: 4

Доступ: (2755/drwxr-sr-x) Uid: ( 1000/ xi) Gid: ( 1000/ xi)

Доступ: 2020-03-10 16:47:48.141500240 +0300

Модифицирован: 2011-04-25 18:50:52.000000000 +0400

Изменён: 2020-10-27 13:58:38.723791516 +0300

Текущее время и время модификации файла

Как работает ctime а также mtime отличаются для файла в find команда? Например, будет

дать тот же результат или нет?

1 ответ

CTime

ctime — это время изменения индекса или файла. Время ctime обновляется при изменении атрибутов файла, например при смене владельца, изменении разрешения или перемещении файла в другую файловую систему, но также будет обновляться при изменении файла.

время изменения

mtime — время изменения файла. Mtime обновляется, когда вы изменяете файл. Всякий раз, когда вы обновляете содержимое файла или сохраняете файл, mtime обновляется. В большинстве случаев ctime и mtime будут одинаковыми, если только не обновляются только атрибуты файла. В этом случае обновляется только ctime

utime

Эта функция не определена стандартом ANSI С.

Функция utime() изменяет время создания (или последней модификации) файла, чье имя опре­деляется указателем fname. Новое время задается структурой, на которую указывает параметр t. Структура utimbuf определена следующим образом:

Поле actime не относится к DOS. Если параметр t имеет значение NULL, то время создания файла устанавливается равным текущему времени системы.

Функция utime() в случае успеха возвращает 0. При возникновении ошибки возвращается зна­чение — 1, а переменная errno устанавливается в одно из следующих значений:

Макрос Значение
EACCESS Доступ запрещен
EMFILE Слишком много открытых файлов
ENOENT Файл не существует

Следующая программа устанавливает время создания заданного файла равным текущему времени системы. ( Это простая версия утилиты TOUCH. )
#include
#include
int main ( int argc , char * argv [ ] )
<
if ( argc != 2 ) <
printf ( «Usage: SETTIME » ) ;
return 1 ;
>

/* установка текущего времени */
utime ( argv [ 1 ] , NULL ) ;
return 0 ;
>

Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL