Faire un time en nanosecondes avec stat !
Résolu
Bonjour!
Mon but ici, est de comparer deux valeur (date de dernière modification) pour pouvoir faire un tri par date de mes fichiers (j'utilise une liste chaînée et une structure dans la quelle je stocke le résultat de
(Je refais la fonction
Le time_t st_mtime n'est pas assez précis pour moi. J'ai vu sur plusieurs forums (en anglais) qui'il y avait possibilité d'avoir un time en nanosecondes mais impossible de comprendre comment l'utiliser dans mon cas.
Si quelqu'un pouvait me mettre sur la voie ..
Merci !
Mon but ici, est de comparer deux valeur (date de dernière modification) pour pouvoir faire un tri par date de mes fichiers (j'utilise une liste chaînée et une structure dans la quelle je stocke le résultat de
stat).
(Je refais la fonction
ls, donc ici l'option
-t).
Le time_t st_mtime n'est pas assez précis pour moi. J'ai vu sur plusieurs forums (en anglais) qui'il y avait possibilité d'avoir un time en nanosecondes mais impossible de comprendre comment l'utiliser dans mon cas.
Si quelqu'un pouvait me mettre sur la voie ..
Merci !
A voir également:
- St_mtim
- Popcorn time - Télécharger - TV & Vidéo
- Finish time lite - Télécharger - Utilitaires
- Windir stat - Télécharger - Gestion de fichiers
- Quick time - Télécharger - Lecture
- Salat time - Télécharger - Agendas & Calendriers
1 réponse
Bonjour,
Je n'ai pas vraiment compris ta question. D'après le man de
... avec :
... donc en gros les dates que tu récupères sont de type
https://pubs.opengroup.org/onlinepubs/007908775/xsh/time.h.html
Ce qui donne :
Ce qui donne par exemple :
Bonne chance
Je n'ai pas vraiment compris ta question. D'après le man de
stat, la fonction prend en paramètre :
int stat(const char *pathname, struct stat *buf);
... avec :
struct stat { dev_t st_dev; /* Périphérique */ ino_t st_ino; /* Numéro d’inœud */ mode_t st_mode; /* Protection */ nlink_t st_nlink; /* Nombre de liens physiques */ uid_t st_uid; /* UID du propriétaire */ gid_t st_gid; /* GID du propriétaire */ dev_t st_rdev; /* Type de périphérique */ off_t st_size; /* Taille totale en octets */ blksize_t st_blksize; /* Taille de bloc pour E/S */ blkcnt_t st_blocks; /* Nombre de blocs de 512 o alloués */ /* Depuis Linux 2.6, le noyau permet une précision à la nanoseconde pour les champs temporels suivants. Pour plus de précisions avant Linux 2.6, consultez les NOTES. */ struct timespec st_atim; /* Heure dernier accès */ struct timespec st_mtim; /* Heure dernière modification */ struct timespec st_ctim; /* Heure dernier changement état */ #define st_atime st_atim.tv_sec /* Rétrocompatibilité */ #define st_mtime st_mtim.tv_sec #define st_ctime st_ctim.tv_sec };
... donc en gros les dates que tu récupères sont de type
struct timespecainsi définie :
https://pubs.opengroup.org/onlinepubs/007908775/xsh/time.h.html
Ce qui donne :
#include <errno.h> // errno #include <stdio.h> // printf, fprintf #include <stdlib.h> // EXIT_* #include <string.h> // strerror #include <sys/types.h> // stat #include <sys/stat.h> // stat #include <time.h> // ctime #include <unistd.h> // stat int main(int argc, char ** argv) { // Handle arguments if (argc != 2) { fprintf(stderr, "usage: %s filename\n", argv[0]); return EXIT_FAILURE; } const char * filename = argv[1]; // Get stats struct stat result; if (stat(filename, &result) == 0) { printf("Last access of %s: %sns: %ld\n", filename, ctime(&result.st_atim.tv_sec), result.st_atim.tv_nsec ); } else { fprintf(stderr, "%s: %s.\n", argv[0], strerror(errno)); } return EXIT_SUCCESS; }
Ce qui donne par exemple :
(mando@velvet) (~) $ ./a.out /etc/fstab
Last access of /etc/fstab: Sat Apr 23 20:36:49 2016
ns: 236008608
Bonne chance