Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 为什么stat mtime每秒只更新两次?_Linux_R_Stat - Fatal编程技术网

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

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似

更新

下面的bash命令行似乎表明这不是一个R问题(使用sleep查看它只会在每秒0.43和0.93后更新)。(所以我更改了问号。)

然而,我看到的是“修改:2013-06-20 14:28:36.938579054”,而不是“修改:2013-06-20 14:28:36”,这表明我的linux内核是按照纳秒精度编译和配置的。所以,我仍然有点困惑,为什么它看起来离纳秒级的精度差得太远了


下面的脚本隔离了我在真实脚本中发现的一个问题。我重复地将数据保存到同一个文件中。文件.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