对于EXT3,文件时间戳的精度被限制为1秒,对于UFS,文件时间戳的精度限制为1微秒,对于EXT4,文件时间戳的精度被限制为1毫秒(至少根据经验)。是否有任何方法仅根据文件系统信息来确定这一点?
我能想到的麻烦的替代方案要么是将我所有的单元测试限制在秒(我现在就这样做了),要么是touch一堆文件,并检查stat -c %x中哪些数字是零。
发布于 2011-05-06 17:40:46
据我所知,没有任何地方可以储存这些资料。它被编码到文件系统中。但是,您可以手动创建一个文件系统列表以及相应的精度。我将使用一个case语句来根据您的文件系统列表测试文件系统id。您可以创建默认的1,因为很少有精度小于1秒的例子。
较早版本的FAT和当前版本的zip使用2秒的时间戳精度,据我在网上看到的。不过,我建议你去核实一下。
您可以使用以下命令获取文件文件系统的id。
stat -f --format="%t" $file发布于 2011-04-19 07:26:49
通常,您可以使用statvfs或路径,但它们似乎不支持任何查找该信息的方法。
显然,这种特性是未来POSIX标准的正在讨论中。
我们还将提交一些路径增强文件,以便在每个路径基础上返回时间戳的粒度。
不幸的是,我今天看不出有什么干净的方法可以做到这一点,即使是以操作系统特有的方式也不行。
任何试图构建文件系统列表的方法,以及它是否支持次秒级解析,都是危险的。例如,如果节点为256个字节,则ext4似乎支持纳秒分辨率,但如果节点为128个字节,则不支持纳秒分辨率。
汇编一个全面和准确的列表将是困难的,可能需要根访问,它可能会改变明天。这听起来比我只运行stat几次还困难。
发布于 2018-12-26 14:08:03
我刚刚实现了一个文件数据库的检测。我首先将文件的时间戳设置为1234 millis,然后再读取它并检查它是1234 (至少ms精度)还是1000 (第二精度)。到目前为止,我学到的是:
https://unix.stackexchange.com/questions/11599
复制相似问题