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.