我想在上次访问文件时得到,我尝试了以下代码:
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
我期待延迟前和延迟后输出的差异。 也输出相同我每次都运行代码。
什么可能是错的?答案 0 :(得分: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
答案 1 :(得分: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-changing-the-access-time