9

我想获取上次访问文件的时间,我尝试了以下代码:

import os, time

os.system("python test.py")
print os.stat('test.py').st_atime

time.sleep(60)

os.system("python test.py")
print os.stat('test.py').st_atime

但每次输出都如下所示:

1358489344.72
1358489344.72

我期待延迟之前和延迟之后的输出有所不同。每次运行代码时,输​​出也相同。

有什么问题?

4

2 回答 2

7

st_atime 字段由文件访问更改,例如,execve(2)、mknod(2)、pipe(2)、utime(2) 和 read(2)(大于零字节)。其他例程,如 mmap(2),可能会也可能不会更新 st_atime。

当您运行“python test.py”时,它不会调用 read(2),而是调用 mmap(2)。这就是访问时间没有更新的原因。

这是“strace python test.py”的输出

open("test.py", O_RDONLY)               = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=36, ...}) = 0
mmap(NULL, 65536, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2ad626cdd000
于 2013-01-18T07:08:21.127 回答
1

noatime也许文件系统是用选项挂载的

noatime
     Do not update inode access times on this filesystem 
     (e.g, for faster access on the news spool to speed up news servers).

检查你的/etc/fstab

有关访问时间的更多信息https://superuser.com/questions/464290/why-is-cat-not-sharing-the-access-time

于 2013-01-18T06:56:21.410 回答