2010-08-02 35 views
0

Je viens de découvrir que l'appel stat(), et le struct stat correspondant, ne contient pas de champs pour les temps de fichier avec une précision supérieure à une seconde. Pour définir ces heures, il existe une variété de fonctions {f,l}utime{n,}s(), mais pas pour obtenir.Comment récupérer les temps de fichier avec une précision de l'ordre de la nanoseconde?

Comment alors obtenir ces temps avec une précision de l'ordre de la nanoseconde, de préférence en utilisant API POSIX?

+2

Quelle serait la valeur des horodatages de fichier nanoseconde? Un disque est un dispositif relativement lent; écrire le fichier sur un disque prend beaucoup plus de temps qu'une nanoseconde. En supposant une seule recherche et un secteur écrire, le temps d'écrire le fichier est comme mesuré en dizaines de millisecondes avec des erreurs considérables à de petits changements dans le taux de rotation physique du disque, les distractions OS, ... Je peux comprendre * distinguer * le temps des tampons de fichiers afin que vous puissiez dire que l'un a été écrit avant l'autre; Est-ce ce dont vous avez besoin? –

+1

Je sais ce que je veux. Quelle est la douceur de cette discipline? Je ne peux pas câliner l'ordinateur pour faire ce que je veux. –

Répondre

3

La structure stat retournée par stat() lui-même a été mis à jour pour POSIX.1-2008 .

La structure struct stat contient les trois heures de modification en tant que:

struct timespec st_atim - Last data access timestamp. 
struct timespec st_mtim - Last data modification timestamp. 
struct timespec st_ctim - Last file status change timestamp. 

(de this OpenGroup link here sous Headers, <sys/stat.h>) et que struct timespec est défini là (en <time.h>) comme contenant au moins:

time_t tv_sec   - Seconds. 
long tv_nsec   - Nanoseconds. 

Auparavant , ces trois fois étaient time_t avec leur résolution d'une seconde.

+0

La 'struct stat' que vous décrivez ici n'est pas dans POSIX: http://www.opengroup.org/onlinepubs/000095399/basedefs/sys/stat.h.html. Attention à élaborer sur la source? – Dummy00001

+0

HP-UX 11 et AIX 5.x ont seulement 'time_t'. Linux (SLES 10) et Solaris 10 ont le 'struct timespec', mais son nom/façon d'y accéder n'est pas uniforme. Ce que vous citez ci-dessus provient de Solaris 10 et ne fonctionnerait sur aucun autre système. Down-vote stands. – Dummy00001

+1

@ Dummy00001, c'est dans POSIX.1-2008 (numéro 7). Vous regardez l'édition 2004 (numéro 6). Suivez le lien que j'ai donné pour plus de détails, répété ici: http://www.opengroup.org/onlinepubs/9699919799/ – paxdiablo

1

La plupart des systèmes de fichiers ne contiennent pas d'horodatages aussi précis. De here:

La plupart des systèmes de fichiers, y compris ext3, comprennent des données d'horodatage qui est précise à une seconde. Ext4 étend la précision de ces données à une nanoseconde. Certaines sources indiquent également que les horodatages ext4 soutiennent les dates par 25 Avril, 2514 contre 18 Janvier, 2038, pour ext3