Python open(file,vr) 是否应该更新时间?

use*_*648 5 python linux filesystems file-io

每当我open()使用 的文件时Python,上次访问时间都不会更新,这很奇怪:

如果我打开r/rb文件没有任何变化,如果我统计文件

如果我打开w/r+或 ctime 和 mtime 更新正确但没有atime

它看起来不像是文件系统问题(在这种情况下是 ext3),因为如果我触摸或 cat 文件,它确实会正确更新。

我没能找到很多关于它的信息;它应该以这种方式行事还是有什么问题?

Zau*_*bov 1

请尝试运行mount,看看noatime挂载的文件系统上是否使用了标志。另外,如果您的内核足够新,则默认设置的是“relatime”。

“open()”代码非常不言自明,并且不会与 ATIME 标志混淆:

/* >> fileutils.c from Python 3.2.3 */

FILE*
_Py_fopen(PyObject *path, const char *mode)
{
#ifdef MS_WINDOWS
    wchar_t wmode[10];
    int usize;

    usize = MultiByteToWideChar(CP_ACP, 0, mode, -1, wmode, sizeof(wmode));
    if (usize == 0)
        return NULL;

    return _wfopen(PyUnicode_AS_UNICODE(path), wmode);
#else
    FILE *f;
    PyObject *bytes = PyUnicode_EncodeFSDefault(path);
    if (bytes == NULL)
        return NULL;

    /* >> Plain fopen(), nothing fancy here. */
    f = fopen(PyBytes_AS_STRING(bytes), mode);
    Py_DECREF(bytes);
    return f;
#endif
}
Run Code Online (Sandbox Code Playgroud)

  • 对于未来的读者,从 Linux 内核 2.6.30 开始,relatime 默认硬编码到内核中,默认间隔为 1 天,因此除非分区使用 strictatime(或 noatime)挂载,否则它是活动的 (2认同)