获取ocaml中具有亚秒级精度的文件的mtime(linux)

时间:2014-01-01 09:24:04

标签: unix ocaml filemtime

Ocaml的Unix模块提供了一个stat函数,该函数返回一个带有float st_mtime成员的记录。

这似乎总是二级精度,即使在支持亚秒级精度的Linux上也是如此。事实上,它是浮动的而不是一个整数,这让我希望能够获得亚秒精度的时间(或类似的东西),但我不知道如何。

我很高兴使用其他OPAM库。我已经使用了电池,所以我不想必须使用例如Jane Street Core - 但是较小的库也可以。

这是我用来测试的脚本:

#!/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

在我的Linux(x86_64)机器上运行时,会打印:

mtime: 1388567583.000000

Python获得亚秒mtime没有问题,因此我的操作系统和FS肯定支持它。

1 个答案:

答案 0 :(得分:2)

可以在Inria的代码库的Github mirror看到Unix.stat的实现。如您所见,可移动的第二精度时间值直接转换为双精度数,忽略struct stat中可用的较新的纳秒精度值。

请考虑提交错误报告,以便改进。

与此同时,如果您迫切需要此功能并且无法等待,您可以编写自己的改进的stat_ext来返回亚秒级时间戳。当然,除非非常需要,否则最好避免重新实现stdlib。