Глава 13: Манипулирование файлами и каталогами
13.7 Изменение меток времени
С кажднм файлом связан набор из трех меток времени. Мы вкратце упоминали о них, когда говорили о том, как получить информацию о файле:
это время последнего доступа, время последнего изменения и время последнего изменения индексного дескриптора. Первым двум моткам времени можно присвоить произвольные значения с помощью функции utime (ко-торая соответствует системному вызову utime в ОС UNIX). При установке двух этих значений третья метка автоматически устанавливается в текущее время, поэтому отдельного способа для ее установки не предусмотрено.
Эти значения устанавливаются во внутреннем формате времени, а именно в количестве секунд, прошедших после полуночи 1 января 1970 года по среднегринвичскому времени. Когда мы писали нашу книгу, эта цифра достигла 800 миллионов с небольшим. (Во внутреннем формате она пред-ставляется как 32-разрядное число без знака, и если все мы не перейдем на 64-разрядные (и более) машины, то переполнение наступит где-то в следующем столетии. У нас будут гораздо более серьезные проблеми в 2000-м году*.)
* Perl-функции localtime nqmtime работают так, как в С: они возвращают год, изкоторого вычтена цифра 1900. В 2003-м году localtime выдаст год как 103.
Функция utime работает аналогично функциям chmod и unlink. Она получает список имен файлов и возвращает число файлов, параметри времени которых были изменены. Вот что нужно сделать, чтобы файли fred и barney выглядели так, будто они изменялись в недавнем прошлом:
$atime = $mtime = 700_000_000; # некоторое время назад
utime($atime,$mtime,"fred","barney")
Никакого "розумного" значения для меток времени нет: можно сделать так, чтобы файл выглядел сколь угодно старым, или чтобы казалось, будто он бил изменен в далеком будущем (это полезно, если вы пишете научно-фантастические рассказы). Вот как, например с помощью функции time (которая возвращает текущее время как метку времени UNIX) можно сделать так, чтобы казалось, будто файл max_headroom был изменен спустя 20 минут после текущего момента времени:
$when = time() + 20*60; # 20 минут с текущего момента
utime($when,$when,"max headroom");
Назад | Вперед
Содержание (общее) | Содержание раздела
Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:
|