1

修改过程开始(打开并写入文件)或修改过程结束(关闭文件)时是否更新 mtime?

我在这个链接上找到了一些东西。

See man 2 stat for the semantics of mtime and ctime. In practice, the mtime and ctime will be updated in the in-memory copy of the inode and flushed out to disk asynchronously.

我认为 inode 可能不止一次被刷新。如果是真的。这是否意味着在修改过程中mtime可能会多次更新?

4

1 回答 1

2

从概念上讲,每次修改都发生在特定的时间。这mtime是最近一次此类事件的时间。

如果您愿意,您可以将对文件的大量写入视为将其分解为一系列单独的写入,每次写入一个字节(或位,如果您愿意!)。每个单字节写入都是瞬时发生的。所以在耗时较长的大写之后,修改时间应该反映大写最后一部分完成的时间,也就是大写结束的时间。

那是常规写入(write(), pwrite(),writev()等...)当文件被映射到内存(使用mmap())并且与文件映射关联的内存地址之一被更新时,应该发生什么并不那么清楚。但在这种情况下,标准有答案。来自 Linux 的mmap()手册页:“使用 PROT_WRITE 和 MAP_SHARED 映射的文件的 st_ctime 和 st_mtime 字段将在写入映射区域后更新,并且在随后的带有 MS_SYNC 或 MS_ASYNC 标志的 msync(2) 之前更新,如果发生的话。”

顺便说一句,打开文件不算作修改(即使您打开文件进行写入)。关闭文件也不算作修改。只有实际写入它。

于 2013-03-03T14:11:48.900 回答