Linux 为什么stat mtime每秒只更新两次?
更新 下面的bash命令行似乎表明这不是一个R问题(使用sleep查看它只会在每秒0.43和0.93后更新)。(所以我更改了问号。) 然而,我看到的是“修改:2013-06-20 14:28:36.938579054”,而不是“修改:2013-06-20 14:28:36”,这表明我的linux内核是按照纳秒精度编译和配置的。所以,我仍然有点困惑,为什么它看起来离纳秒级的精度差得太远了Linux 为什么stat mtime每秒只更新两次?,linux,r,stat,Linux,R,Stat,更新 下面的bash命令行似乎表明这不是一个R问题(使用sleep查看它只会在每秒0.43和0.93后更新)。(所以我更改了问号。) 然而,我看到的是“修改:2013-06-20 14:28:36.938579054”,而不是“修改:2013-06-20 14:28:36”,这表明我的linux内核是按照纳秒精度编译和配置的。所以,我仍然有点困惑,为什么它看起来离纳秒级的精度差得太远了 下面的脚本隔离了我在真实脚本中发现的一个问题。我重复地将数据保存到同一个文件中。文件.info$mtime似
下面的脚本隔离了我在真实脚本中发现的一个问题。我重复地将数据保存到同一个文件中。文件.info$mtime似乎每秒只更新两次。当我使用0.05秒睡眠时,问题很明显:
file.info
在100次中不会更新87次或88次。如果我把睡眠时间增加到0.5秒,它就工作得很好(bad==0)。如果我把睡眠时间减少到0.4s,100次中有14次会出错
我的问题是:这是一个R错误,还是与O.S.有关。?或者我做错了什么,或者做出了错误的假设
我正在Ubuntu 10.04上使用R3.0.1
顺便说一句,我注意到当运行下面的时,mtime总是以.936或.436结束(或非常接近这些值的值)。绝对不要在0.250、0.800或0.950等处
还有一个可能有用的数据点:我尝试了文件。每次调用保存之前都要删除。这没什么区别
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")
如果你每秒更新两次,你实际上做得很好。摘自关于file.info的第227页:
三个文件时间的含义取决于操作系统和文件系统。在Windows本机文件系统上,ctime是文件创建时间(大多数类似Unix的文件上都没有记录)
系统)。什么是“文件访问”,因此“上次访问时间”取决于系统
报告的时间精确到秒,在某些系统上可能更精确。然而,
许多文件系统仅以秒为单位记录时间,有些文件系统(例如FAT系统上的修改时间)
以2秒或更长的增量记录
我可以确认这个问题不是Ubuntu独有的,我在OSX上运行了R3.0.1
,bad=90+。谢谢Joe,这非常有帮助。老实说,如果是简单的二次精度,我会更高兴!(这个bug出现在单元测试代码中,我故意睡到下一整秒钟,以确保得到一个新的时间戳!!)
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")
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