Fstat vs. stat – fstat wird nicht aktualisiert?Linux

Linux verstehen
Anonymous
 Fstat vs. stat – fstat wird nicht aktualisiert?

Post by Anonymous »

Mir ist ein seltsames Verhalten bei fstat(2) und stat(2) aufgefallen. Beim Öffnen einer Datei mit fopen(3) oder open(2) scheint fstat st_mtime nicht korrekt zu aktualisieren, wenn die Datei geändert wird.
Ein minimales Arbeitsbeispiel:

Code: Select all

#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;
}
Dies führt zu einer Beispielausgabe wie dieser:

Code: Select all

$ 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]

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post