1

Ocaml 的Unix模块提供了一个stat函数,它返回一个带有浮点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 绝对支持它。

4

1 回答 1

2

的实现Unix.stat可以在Inria 代码库的Github 镜像中看到。如您所见,可移植的秒精度时间值直接转换为双精度值,忽略struct stat.

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

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

于 2014-01-01T12:48:06.527 回答