5 votes

comment obtenir l'heure de dernière modification d'un fichier au format epoch time, précision milliseconde

Comment obtenir l'heure de dernière modification d'un fichier avec un format de temps d'époque, précision milliseconde sur un système linux

J'ai essayé stat, mais il ne peut montrer le temps d'époque qu'en secondes. Existe-t-il un moyen simple d'obtenir le temps d'épochage en millisecondes ?

8voto

Nikos C. Points 18676

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 .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X