atime/mtime 是否在 fopen、fread/fwrite 和/或 fclose 上更新?

atime/mtime 是否在 fopen、fread/fwrite 和/或 fclose 上更新?

我只是好奇;atime 是否在freadfopen/或更新fclose

那么 mtime 呢?它是在fopenfwrite和/或更新的吗fclose

答案1

如果您的strace流程,您将看到fopen和相应的系统stat。以PHP作为示例。

PHP 示例

首先确保文件系统正在更新这些值,

    mount -o remount,atime,diratime /

然后制作一个小脚本。

    <?php
      echo "fopen: " .date("H:i:s \n");
      $fh = fopen('test.tmp', 'r');
      sleep(2);
      echo "fread: ".date("H:i:s \n");
      fread($fh,1024);
      sleep(2);
      echo "fwrite: ".date("H:i:s \n");
      fwrite($fh,'test');
      sleep(2);
      echo "fclose: ".date("H:i:s \n");
      fclose($fh);
      echo shell_exec('stat test.tmp');

然后制作测试用例并执行

    echo test > test.tmp
    php test.php

其结果是……

    [/]$ php test.php
    fopen: 14:31:34
    fread: 14:31:36
    fwrite: 14:31:38
    fclose: 14:31:40
      File: `test.tmp'
      Size: 5               Blocks: 8          IO Block: 4096   regular file
    Device: 805h/2053d      Inode: 98213       Links: 1
    Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
    Access: 2012-09-27 14:31:36.000000000 +0100
    Modify: 2012-09-27 14:28:28.000000000 +0100
    Change: 2012-09-27 14:28:28.000000000 +0100

所以 ...

  1. fread应该与atime
  2. fwrite应与相关mtime

参考

    mtime: time of last modification    (eg. ls -l)
    ctime: time of last status change   (eg. ls -lc)
    atime: time of last access          (eg. ls -lu)

作为功​​能的一部分,这已经有了很好的记录stat,参考。http://en.wikipedia.org/wiki/Stat_%28system_call%29

答案2

您必须使用以下命令打开文件'w'才能进行写入:

$fh = fopen('test.tmp', 'w');

相关内容