Как программно записать даты изменения файла в POSIX? - PullRequest
8 голосов
/ 16 марта 2009

Я бы хотел коснуться моих файлов из кода C, чтобы изменить дату их доступа. Это не похоже на работу:

struct stat fileSt;
lstat(path, &fileSt);
fileSt.st_mtime = time(NULL);

Спасибо за помощь.

Ответы [ 4 ]

11 голосов
/ 16 марта 2009

utimes () , вероятно, как это сделать. utime () устарел.

Подобные вещи тривиально определить с помощью таких инструментов, как strace.

strace touch -t 01010911 xxx
.
.
open("xxx", O_WRONLY|O_NONBLOCK|O_CREAT|O_NOCTTY|O_LARGEFILE, 0666) = 0
utimes("/proc/self/fd/0", {1230829860, 0}) = 0
8 голосов
/ 16 марта 2009

Я думаю, что вы хотите utime(2). Этого должно быть достаточно:

utime(filename, NULL);

Документы говорят:

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

[...]

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

Если время равно NULL, то время доступа и изменения файла установить текущее время.

2 голосов
/ 20 марта 2016

Старые utime() и utimes() подходят для многих случаев использования, но для обновления atime & mtime с наносекундным разрешением , которое вам необходимо в современных системах, используйте: 1007 *

utimensat(0, path, NULL, 0);

Это очень полезно в сочетании с более новым stat(), который возвращает поле struct timespec st_mtim в struct stat с наносекундным разрешением.

1 голос
/ 16 марта 2009

Я думаю, вам нужно посмотреть на системный вызов utime () / utimes (). Не на моем обычном компьютере, поэтому я не могу посмотреть подробности, я боюсь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...