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

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

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

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

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

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

Шварц Р., Кристиансен Т. Изучаем Perl — Москва, 2002. — 324 c.
Скачать (прямая ссылка): izuchaemperl2002.djvu
Предыдущая << 1 .. 62 63 64 65 66 67 < 68 > 69 70 71 72 73 74 .. 124 >> Следующая

использовать зарезервированные слова, рекомендуется использовать верхний
регистр). Дескриптор файла fred и дескриптор каталога fred не связаны
между собой.
Дескриптор каталога представляет собой соединение с конкретным каталогом.
Вместо чтения данных (как из дескриптора файла) вы используете дескриптор
каталога для чтения списка имен файлов в этом каталоге. Дескрипторы
каталогов всегда открываются только для чтения; нельзя использовать
дескриптор каталога для изменения имени файла или удаления файла.
Если функции readdir() и ее аналогов в библиотеке нет (и при инсталляции
языка Perl никакую замену вы не предусмотрели), то использование любой из
этих программ приведет к фатальной ошибке и ваша программа компиляцию не
пройдет: она аварийно завершится до выполнения первой строки кода. Perl
всегда старается изолировать вас от влияния рабочей среды, но такие
чудеса ему не подвластны.
Открытие и закрытие дескриптора каталога
Функция open dir работает аналогично библиотечному вызову с тем же именем
в С и C++. Ей дается имя нового дескриптора каталога и строковое
значение, задающее имя открываемого каталога. Если каталог может быть
открыт, opendir возвращает значение "истина"; в противном случае ока
возвращает "ложь". Вот пример:
opendir(ETC,"/etc") || die "Cannot opendir /etc: $!";
После этого обычно следуют разного рода манипуляции с дескриптором
каталога ЕТС, но сначала, наверное, нужно разобраться, как закрывать
дескриптор каталога. Это делается с помощью функции closedir, которая
весьма похожа на close:
closedir(ETC);
Как и close, closedir часто оказывается ненужной, потому что все
дескрипторы каталогов автоматически закрываются перед повторным открытием
либо в конце программы.
170
Изучаем PERL
Чтение дескриптора каталога
Открыв дескриптор каталога, мы можем прочитать список имен с помощью
функции readdir, которая принимает единственный параметр - дескриптор
каталога. Каждый вызов readdir в скалярном контексте возвращает следующее
имя файла (только основное имя: в возвращаемом значении никаких косых
нет) в порядке, который на первый взгляд кажется случайным*. Если больше
имен нет, readdir возвращает undef**. Вызов readdir в списочном контексте
возвращает все оставшиеся имена файлов в виде списка с одним именем,
приходящимся на каждый элемент. Вот пример, в котором выдается перечень
всех имен файлов, содержащихся в каталоге /etc.
opendir(ETC,"/etc") || die "no etc?:
while ($name = readdir(ETC)) { # скалярный контекст, по одному на
цикл
print '^narneXn11; #выводит passwd, group и т.д.
}
closedir(ETC);
А вот как можно получить все имена в алфавитном порядке с помощью функции
sort:
opendir(ETC,"/etc") \\ die "no etc9: $'";
foreach $name (sort readdir(ETC)) ( # списочный контекст с сортировкой
print "$name\n"; #выводит ., passwd, group и т.д.
}
closedir(ETC);
В этот список включены имена файлов, которые начинаются с точки. Это не
похоже на результат развертывания, выполненного с использованием <*>, при
котором имена, начинающиеся с точки, не возвращаются. С другой стороны,
это похоже на результат работы команды echo* shell.
* Точнее говоря - это порядок, в котором имена файлов расположены в
каталоге, т е тот же "беспорядочный порядок", в котором вы получаете
файлы в ОС UNIX в результате вызова команды find или h -/
** Это означает, что при работе с опцией-w вам придется использовать цикл
while (defined ($name = readdir (...))
12. Доступ it- каталогам
171
Упражнения
Ответы см. в приложении А.
1. Напишите программу, которая открывает каталог, заданный ее параметром,
а затем выдает список имен файлов этого каталога в алфавитном порядке. (В
случае, если переход в каталог не может быть выполнен, программа должна
предупредить об этом пользователя.)
2. Модифицируйте программу так, чтобы она выдавала имена всех файлов, а
не только те, имена которых не начинаются с точки. Попробуйте сделать это
как с помощью операции развертывания, так и посредством использования
дескриптора каталога.
В этой главе:
• Удаление файла
• Переименование файла
• Создание для файла альтернативных имен: связывание ссылками
• Создание и удаление каталогов
• Изменение прав доступа
• Изменение принадлежности
• Изменение меток времени
• Упражнения
Манипулирование файлами и каталогами
В этой главе мы покажем, как можно манипулировать самими файлами, а не
только содержащимися в них данными. При демонстрации процедуры доступа к
файлам и каталогам мы будем пользоваться семантикой UNIX (а также POSIX и
Linux). Есть и другие механизмы доступа к файловым системам, но
описываемые здесь средства являются стандартными для современных файловых
систем.
Удаление файла
Вы уже научились создавать в Perl файл, открывая его для вывода через
дескриптор файла. Сейчас мы освоим опасную процедуру удаления файлов
(очень кстати для тринадцатой главы, не правда ли?).
Perl-функция unlink (названная по имени системного вызова POSIX) удаляет
Предыдущая << 1 .. 62 63 64 65 66 67 < 68 > 69 70 71 72 73 74 .. 124 >> Следующая