Модификация и Время доступа файла?

Можно извлечь содержание об/мин к диску (а не в / но некоторый другой каталог). Я использую мГц для этого, где можно ввести файл об/мин как каталог и извлечь файлы, Вам нужно. Для извлечения целого об/мин в текущий каталог, Вы могли бы сделать что-то как

rpm2cpio yourrpm.rpm | cpio -idmv
5
28.09.2012, 16:16
4 ответа

utime/utimes syscall позволяет Вам установить время доступа и время изменения произвольно. Таким образом, Вы можете stat файл, затем используйте utime изменить только одного из них. Из страницы справочника:

Имя:

utime, utimes - файл изменения длится доступ и время изменения

РЕЗЮМЕ

   #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]);

ОПИСАНИЕ

utime () системный вызов изменяет времена доступа и время изменения inode, указанного именем файла к actime и modtime полям времен соответственно.

Если времена являются ПУСТЫМИ, то времена доступа и время изменения файла установлены на текущее время.

Изменение меток времени разрешено когда: или процесс имеет appropri ‐, съел полномочия, или эффективный идентификатор пользователя равняется идентификатору пользователя файла, или времена являются ПУСТЫМИ, и процесс имеет разрешение записи для файла.

[ … ]

5
27.01.2020, 20:33

Я нашел путь. Я использовал статистику GNU (stat (GNU coreutils) 8.19) для рассмотрения "Доступа" "Измените" и метки времени "Изменения" файла.

Я мог обновить время "Изменения" путем выполнения a chmod u+x на файле. "Измените" и метки времени "Доступа" остались тем же.

Я мог обновить файл "Доступа" путем выполнения a cat на нем. "Измените" и метки времени "Изменения" остались тем же.

Я записал маленькую программу C, которая просто делает open(filename, O_WRONLY);, пишет единственный байт в дескриптор файла, и затем a close(filedes); на получающемся дескрипторе файла. stat не показал изменения на метке времени "Доступа" подчиненного файла, но "Измените", и метки времени "Изменения" были обновлены.

Это было всем в соответствии с Linux 3.5.4, справедливо недавно Дуга обновления ноутбук Linux, в файловой системе Ext4.

Маленькая программа C:

#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>

int
main(int ac, char **av)
{
        int fd = open(av[1], O_WRONLY);
        if (fd >= 0)
        {
                char buf[12];
                write(fd, buf, 1);
                if (close(fd) < 0)
                        fprintf(stderr, "Problem closing file: %s\n",
                                strerror(errno));
        } else {
                fprintf(stderr, "Problem opening \"%s\": %s\n",
                        av[1], strerror(errno));
        }
        return 0;
}
4
27.01.2020, 20:33
  • 1
    Разве это не повредило бы файл, так как Вы пишете неопределенные данные в начало его? –  a CVn 28.09.2012, 10:29
  • 2
    Да. Но это был самый простой пример, который я мог найти. –  Bruce Ediger 28.09.2012, 16:04

Повторно смонтируйте FS с noatime атрибут, измените файл и повторно смонтируйте его назад.

2
27.01.2020, 20:33

Включайте -m аргумент touch. По умолчанию, touch команда изменяет и время доступа и время изменения; если Вы передаете также -a или -m затем только требуемое время изменяется.

2
27.01.2020, 20:33

Теги

Похожие вопросы