atime / mtime更新fopen,fread / fwrite和/或fclose?

我只是好奇; 是时间更新freadfopen和/或fclose

那么mtime呢? 它更新fopenfwrite和/或fclose

如果你对你的stream程进行了调整,你会看到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'); 

然后制作testing用例并执行

  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函数的一部分,这是很好的logging。 http://en.wikipedia.org/wiki/Stat_%28system_call%29

你必须用'w'打开文件才能写入工作:

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