Si vous êtes sur un système de fichiers qui prend en charge la précision à la seconde près (par exemple, ext4 la prend en charge, ext3 non), vous pouvez obtenir une précision à la nanoseconde près grâce à la fonction st_atim.tv_nsec
, st_ctim.tv_nsec
y st_mtim.tv_nsec
Les domaines de struct stat
. Les valeurs représentent le nombre de nanosecondes qui s'ajoute au nombre de secondes dans le temps. st_atime
et ses amis. Par exemple, vous pouvez obtenir des timestamps en millisecondes avec :
struct stat info;
stat("/etc", &info);
uint64_t access_ms = info.st_atime * 1000 + info.st_atim.tv_nsec / 1000000;
uint64_t status_ms = info.st_ctime * 1000 + info.st_ctim.tv_nsec / 1000000;
uint64_t modification_ms = info.st_mtime * 1000 + info.st_mtim.tv_nsec / 1000000;
Une seconde a 1000ms, donc on multiplie par ça. Une milliseconde a 1000000ns, il faut donc la diviser par cette valeur.
Si le système de fichiers ne prend pas en charge la précision à la seconde près, alors l'option tv_nsec
seront toujours égaux à 0. Cela garantit que le même code fonctionnera également sur les systèmes de fichiers qui ne prennent pas en charge la précision à la seconde près.
Notez que le nombre de millisecondes depuis l'époque ne peut pas être stocké dans une valeur de 32 bits. Il faut au moins 64 bits. uint64_t
est fourni par <stdint.h>
. Vous pouvez également utiliser unsigned long long
.