在Python中使用os.stat()时,我可以假定st_ctime始终小于或等于st_mtime吗?如果没有,为什么不呢?

该代码将始终在Linux上运行,但是,如果操作系统之间存在差异,那么请知道。

最佳答案

在某些情况下,此假设可能被证明是无效的(并且在很大程度上取决于OS的实现):

  • 时区。如果您在UTC + 4中创建文件,然后在当前时区为UTC-8,并且操作系统未在幕后使用所有时间戳的情况下对其进行修改,则修改后的时间会更少比创建的时间要多。在这种情况下,现代操作系统(Windows,OSX,BSD之一或Linux)令人惊讶的是mtime
  • 重置操作系统时间。这可能会影响创建这种情况的修改时间。我想说,在这种情况下,如果没有在文件系统驱动程序中进行任何检查来避免这种情况,则mtime
  • 通过系统调用修改时间。同样,文件系统驱动程序可能已进行检查,以避免诸如此类的异常情况。

  • 这两个都是可重现的:最好的选择是采用计划针对此行为的各种操作系统。我所能提供的只是猜测。

    也是,st_ctime不一定是“创建的时间”,而是“最后状态更改”的时间(source)。 utime标记要更新的文件的ctime(source),其类型为“utimbuf”的参数没有ctime的成员。因此,如果操作系统和文件系统允许,则ctime在技术上有可能超过mtime。 os.stat文档实际上提到了这一点:



    虽然Python隐藏了很多C方面的内容,但os.stat和friends都是基于相同的基本C系统调用构建的,因此它们的规范是查找更多信息的好地方。

    10-05 20:10