Fstat vs stat – fstat не обновляется?Linux

Ответить
Anonymous
 Fstat vs stat – fstat не обновляется?

Сообщение Anonymous »

Я заметил странное поведение fstat(2) и stat(2). При открытии файла с помощью fopen(3) или open(2) fstat, похоже, не обновляет st_mtime правильно при изменении файла.
Минимальный рабочий пример:

Код: Выделить всё

#include 
#include 
#include 
#include 
#include 

int main(int argc, char** argv) {
FILE* file = NULL;
int fd = 0;
const char* filename = NULL;
struct stat fstat_FILE_sb, fstat_fd_sb, stat_sb;

if(argc < 2)
goto quit;

file = fopen(filename = argv[1], "rb");

fd = open(filename, O_RDONLY);

if(!file || !fd)
exit(1);

for(;;) {
if(fstat(fileno(file), &fstat_FILE_sb) != 0)
goto quit;
if(fstat(fd, &fstat_fd_sb) != 0)
goto quit;
if(stat(filename, &stat_sb) != 0)
goto quit;

printf("Comparing [%ld vs %ld vs %ld]\n",
fstat_FILE_sb.st_mtime,
fstat_fd_sb.st_mtime,
stat_sb.st_mtime);

sleep(1);
}

quit:
if(file)
fclose(file);
if(fd)
close(fd);
return 0;
}
В результате получается такой пример вывода:

Код: Выделить всё

$ cc a.c -ansi
$ ./a.out a.c
Comparing [1768775974 vs 1768775974 vs 1768775974]
Comparing [1768775974 vs 1768775974 vs 1768775974]
Comparing [1768775974 vs 1768775974 vs 1768775974] 

Подробнее здесь: [url]https://stackoverflow.com/questions/79870792/fstat-vs-stat-fstat-does-not-update[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»