![atime/mtime 是否在 fopen、fread/fwrite 和/或 fclose 上更新?](https://linux22.com/image/597161/atime%2Fmtime%20%E6%98%AF%E5%90%A6%E5%9C%A8%20fopen%E3%80%81fread%2Ffwrite%20%E5%92%8C%2F%E6%88%96%20fclose%20%E4%B8%8A%E6%9B%B4%E6%96%B0%EF%BC%9F.png)
我只是好奇;atime 是否在fread
和fopen
/或更新fclose
?
那么 mtime 呢?它是在fopen
、fwrite
和/或更新的吗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
所以 ...
fread
应该与atime
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');