Обновляется ли atime/mtime на fopen, fread/fwrite и / или fclose?

Мне просто интересно; Обновлен fread, fopen и / или fclose?

Что насчет mtime? Это обновлено на fopen, fwrite и / или fclose?

2 ответа

Решение

Если твой 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

Вы должны открыть файл с 'w' для записи на работу:

$fh = fopen('test.tmp', 'w');
Другие вопросы по тегам