你应该fstat
打开的文件的文件描述符。
>>> import os
>>> f = open("testdv.py")
>>> os.fstat(f.fileno())
posix.stat_result(st_mode=33188, st_ino=1508053, st_dev=65027L, st_nlink=1, st_uid=1000, st_gid=1000, st_size=1107, st_atime=1349180541, st_mtime=1349180540, st_ctime=1349180540)
>>> os.fstat(f.fileno()).st_nlink
1
好的,这个文件有一个链接,因此文件系统中有一个名称。现在删除它:
>>> os.unlink("testdv.py")
>>> os.fstat(f.fileno()).st_nlink
0
没有更多的链接,所以我们有一个“匿名文件”只要我们打开它就保持活力 https://stackoverflow.com/a/5219960/166749。创建同名的新文件对旧文件没有影响:
>>> g = open("testdv.py", "w")
>>> os.fstat(g.fileno()).st_nlink
1
>>> os.fstat(f.fileno()).st_nlink
0
当然,st_nlink
有时可以是>1
最初,因此检查零并不完全可靠(尽管在受控设置中,它可能足够好)。相反,您可以通过比较来验证您最初打开的路径中的文件是否与您拥有文件描述符的文件相同stat
结果:
>>> os.stat("testdv.py") == os.fstat(f.fileno())
False
>>> os.stat("testdv.py") == os.fstat(g.fileno())
True
(如果你希望这是 100% 正确的,那么你应该只比较st_dev
and st_ino
字段上stat
结果,因为其他领域和st_atime
特别是在两次通话之间可能会发生变化。)