为什么stat mtime每秒只更新两次?

时间:2013-06-20 04:24:05

标签: linux r stat

更新

以下bash命令行似乎表明它不是R问题(与睡眠一起玩,看它只会在每秒0.43和0.93更新)。 (所以我改变了问题标签。)

touch tmp.txt;stat tmp.txt;sleep 0.5;touch tmp.txt;stat tmp.txt

但是我看到“修改:2013-06-20 14:28:36.938579054”,而不是“修改:2013-06-20 14:28:36”,这表明我的linux内核编译和配置为纳秒精度。所以,我仍然有点难以理解为什么它似乎距离纳秒级精度很长!


以下脚本隔离了我在真实脚本中发现的问题。我正在重复地将数据保存到同一个文件中。似乎file.info $ mtime每秒只更新两次。当我使用0.05s睡眠时,问题非常明显:file.info不会更新87或88次中的88次。如果我将睡眠时间增加到0.5s,它会完美地工作(坏== 0)。如果我将睡眠时间减少到0.4秒,那么在100次中会出现错误14次。

我的问题是:这是一个R错误,还是与O.S.有关?或者我做错了什么,或做出错误的假设?

我在Ubuntu 10.04上使用R 3.0.1。

顺便说一下,我注意到在运行下面的时候,mtime总是以.936或.436(或非常接近那些)结束。从不在0.250,或0.800,或0.950等。

另一个可能有用的数据点:我在调用file.remove之前每次尝试save。它没有任何区别。

fname="tmp.rdata"
options(digits.secs = 3)

data=runif(100)
save(list=c("data"),file=fname)
info=file.info(fname)

ix=0;bad=0

while(ix<100){
    Sys.sleep(0.05)
    data=runif(100)
    current=Sys.time()
    save(list=c("data"),file=fname)
    info2=file.info(fname)
    if(info2$mtime<=info$mtime){bad=bad+1;cat("****************\n")}
    print(current);print(rbind(info,info2))
    ix=ix+1;info=info2
    }
cat("bad=",bad,"\n")

以下是stat -c "%y" * |sort的输出,用于过去两个月的文件。因此看起来日期可以在第二个任何地方。然而,对于大约在同一时间保存的文件,它们似乎都具有相同的两个值?!

2013-04-16 14:41:50.331227602
2013-04-19 20:52:50.238225648
2013-04-30 10:34:43.896278930
2013-05-02 08:36:39.360523004
2013-05-02 08:46:07.848039045
2013-05-07 17:10:19.372043866
2013-05-07 19:12:00.369502114
2013-05-07 19:19:11.370293101
2013-05-07 22:14:39.744755951
2013-05-07 22:14:58.242163170
2013-05-24 12:21:06.231306593
2013-06-06 15:14:40.174142594
2013-06-10 11:16:31.958667081
2013-06-10 11:18:29.958090098
2013-06-10 11:34:16.961026520
2013-06-12 10:44:12.825080955
2013-06-14 12:50:49.531729270
2013-06-17 11:05:23.792289000
2013-06-18 11:44:40.347221361
2013-06-19 13:10:46.590013564
2013-06-20 11:52:16.436423344
2013-06-20 11:52:24.437938646
2013-06-20 11:52:24.437938646
2013-06-20 13:17:16.436666359
2013-06-20 13:20:50.928713629
2013-06-20 14:28:36.938579054

1 个答案:

答案 0 :(得分:3)

如果您每秒获得两次更新,那么您实际上做得非常好。关于file.info:

R-project reference第227页的摘录
  

三个文件时间的含义取决于操作系统和文件系统。在Windows本机文件系统上,ctime是文件创建时间(在大多数类似Unix的文件中都没有记录   系统)。 “文件访问”的含义是什么,因此“上次访问时间”取决于系统。

     

报告的时间精确到秒,在某些系统上可能更多。然而,   许多文件系统仅以秒为单位记录时间,有些(例如FAT系统上的修改时间)   以2或更多秒的增量记录