Книги
чёрным по белому
Главное меню
Главная О нас Добавить материал Поиск по сайту Карта книг Карта сайта
Книги
Археология Архитектура Бизнес Биология Ветеринария Военная промышленность География Геология Гороскоп Дизайн Журналы Инженерия Информационные ресурсы Искусство История Компьютерная литература Криптология Кулинария Культура Лингвистика Математика Медицина Менеджмент Металлургия Минералогия Музыка Научная литература Нумизматика Образование Охота Педагогика Политика Промышленные производства Психология Путеводители Религия Рыбалка Садоводство Саморазвитие Семиотика Социология Спорт Столярное дело Строительство Техника Туризм Фантастика Физика Футурология Химия Художественная литература Экология Экономика Электроника Энергетика Этика Юриспруденция
Новые книги
Цуканов Б.И. "Время в психике человека" (Медицина)

Суворов С. "Танк Т-64. Первенец танков 2-го поколения " (Военная промышленность)

Нестеров В.А. "Основы проэктирования ракет класса воздух- воздух и авиационных катапульных установок для них" (Военная промышленность)

Фогль Б. "101 вопрос, который задала бы ваша кошка своему ветеринару если бы умела говорить" (Ветеринария)

Яблоков Н.П. "Криминалистика" (Юриспруденция)
Реклама

Изучаем Perl - Шварц Р.

Шварц Р., Кристиансен Т. Изучаем Perl — Москва, 2002. — 324 c.
Скачать (прямая ссылка): izuchaemperl2002.djvu
Предыдущая << 1 .. 54 55 56 57 58 59 < 60 > 61 62 63 64 65 66 .. 124 >> Следующая

-g У файла или каталога установлен идентификатор группы
-k У файла или каталога установлен бит-липучка
-t Выполнение операции isatty() над дескриптором файла дало значение
"истина"
-T Файл - текстовый
-B Файл - двоичный
-M Время с момента последнего изменения (в днях)
-A Время с момента последнего доступа (в днях)
-C Время с момента последнего изменения индексного дескриптора (в
днях)
Большинство этих проверок возвращает просто значение "истина" или "ложь".
О тех, которые этого не делают, мы сейчас поговорим.
Операция -s возвращает значение "истина", если файл непустой, но это
значение особого вида. Это длина файла в байтах, которая интерпретируется
как "истина" при ненулевом значении.
Операции -м, -а и -с (да-да, в верхнем регистре) возвращают количество
дней соответственно с момента последнего изменения файла, доступа к нему
и изменения его индексного дескриптора*. (Индексный дескриптор содержит
всю информацию о файле; подробности см. на man-странице, посвященной
системному вызову stat.) Возвращаемое значение - десятичное число,
* Эти значения определяются относительно времени запуска программы,
занесенного в системном формате времени в переменную $Лт. Если
запрашиваемое значение относится ксобытию, которое произошло после начала
работы программы, оно может быть отрицательным.
10. Дескрипторы файлов и проверка файлов
149
соответствующее прошедшему времени с точностью до 1 секунды: 36 часов
возвращается как 1,5 дня. Если при отборе файлов будет выполнено
сравнение этого показателя с целым числом (например, с 3), то вы получите
только те файлы, которые были изменены ровно столько дней назад, ни
секундой раньше и ни секундой позже. Это значит, что для получения всех
файлов, значение определенного показателя для которых находится в
диапазоне от трех до четырех дней, вам, вероятно, нужно будет
использовать операцию сравнения диапазонов*, а не операцию сравнения
значений.
Эти операции могут работать не только с именами файлов, но и с
дескрипторами. Для этого нужно просто указать в качестве операнда
дескриптор файла. Так, чтобы проверить, доступен ли для выполнения файл,
открытый как somefile, можно сделать следующее:
if (-х SOMEFILE) {
# файл, открытый как SOMEFILE, доступен для выполнения
}
Если имя или дескриптор файла не указаны (т.е. даны только операции -г
или -s), то по умолчанию в качестве операнда берется файл, указанный в
переменной $_ (опять эта переменная!). Так, чтобы проверить список имен
файлов и установить, какие из них доступны для чтения, нужно просто-
напросто написать следующее:
foreach (@some_list_of__filenames) {
print "$_ ls readable\n" if -r; # то же, что и -г $_
}
Функции stat и Istat
Вышеупомянутые операции весьма эффективны при проверке различных
атрибутов конкретного файла или дескриптора файла, но полную информацию с
их помощью получить нельзя. Например, не предусмотрена операция проверки,
которая возвращала бы число ссылок на файл. Чтобы добраться до остальных
сведений о файле, вызовите функцию stat, которая возвращает практически
все, что возвращает системный вызов stat в POSIX (надеемся, мы сказали
больше, чем вы хотите знать).
Операнд функции stat - дескриптор файла или выражение, посредством
которого определяется имя файла. Возвращаемое значение - либо undef, если
вызов неудачен, либо 13-элементный список**, который легче всего описать
с помощью такого списка скалярных переменных:
($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,
$size, $atime, $mtime,$ctime,$blksize,$blocks) = stat(. ..)
* Или операцию int.
** Если вам тяжело запомнить порядок значений, возвращаемых функцией
stat, можете обратиться к модулю File: :stat, впервые введенному в
выпуске 5 004 Он обеспечивает доступ к этим значениям следующим образом
$file_owner = stat (Sfilename)->uid
150
Изучаем PERL
Имена здесь соответствуют частям структуры stat, подробно описанной на
man-странице stat(2). Рекомендуем изучить приведенные там подробные
пояснения.
Например, чтобы получить идентификаторы пользователя и группы из файла
паролей, нужно записать:
($uid,$gid) - (stat("/etc/passwd")) [4,5];
и этого окажется достаточно.
Вызов функции stat с именем символической ссылки возвращает информацию о
том, на что указывает эта ссылка, а не сведения о самой ссылке (если
только она не указывает на что-то в текущий момент недоступное). Если вам
нужна информация о самой символической ссылке (большей частью
бесполезная), используйте вместо stat функцию lstat (которая возвращает
те же данные в том же порядке). С элементами, которые не являются
символическими ссылками, функция lstat работает аналогично stat.
Как и в операциях проверки файлов, операнд функций stat и lstat по
умолчанию - $_. Это значит, что операция stat будет выполняться над
файлом, заданным скалярной переменной $_.
Упражнения
Ответы приведены в приложении А.
1. Напишите программу чтения имени файла из stdin, открытия этого файла и
выдачи его содержимого с предварением каждой строки именем файла и
Предыдущая << 1 .. 54 55 56 57 58 59 < 60 > 61 62 63 64 65 66 .. 124 >> Следующая