Obtenir mtime d’un fichier avec une précision de seconde en ocaml (linux)

Le module Unix d’Ocaml fournit une fonction stat qui renvoie un enregistrement avec un membre float st_mtime .

Cela semble toujours être une précision de second niveau, même sous Linux, qui supporte une précision inférieure à la seconde. Le fait que ce soit un flottant et non un int me donne l’espoir qu’il est possible d’obtenir un temps de précision inférieur à la seconde (ou quelque chose du genre), mais je ne sais pas comment.

Je suis heureux d’utiliser d’autres bibliothèques OPAM. J’utilise déjà des batteries, donc je ne voudrais pas avoir à utiliser par exemple Jane Street Core – mais les petites bibliothèques sont bien.

C’est le script que j’ai utilisé pour tester:

 #!/usr/bin/env ocamlscript Ocaml.packs := ["unix"] -- open Unix open Printf let () = let this_file = Array.get Sys.argv 0 in let stats = Unix.stat this_file in printf "mtime: %f" stats.st_mtime 

lorsqu’il est exécuté sur ma machine Linux (x86_64), il imprime:

 mtime: 1388567583.000000 

Python n’a aucun problème pour obtenir un mtime seconde, donc mon OS et mon FS le supportent définitivement.

L’implémentation d’ Unix.stat peut être vue sur le miroir Github de la base de code d’Inria. Comme vous pouvez le voir, les valeurs temporelles portables de seconde précision sont converties directement en doubles, en ignorant les nouvelles valeurs de précision nanosecondes disponibles dans la struct stat .

S’il vous plaît envisager de soumettre un rapport de bogue afin que cela puisse être amélioré.

En attendant, si vous avez désespérément besoin de cette fonctionnalité et que vous ne pouvez tout simplement pas attendre, vous pouvez écrire votre propre stat_ext amélioré qui renvoie des stat_ext inférieurs à la seconde. Bien sûr, il est préférable d’éviter de réimplémenter le stdlib à moins qu’il y ait un grand besoin.