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

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

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

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

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

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

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

177
Создание и удаление каталогов
Вы не смогли бы выполнить указанные операции (во всяком случае, в UNIX-
системе), не зная о команде mkdir( 1), которая создает каталоги,
содержащие файлы и другие каталоги. В Perl есть эквивалент этой команды -
функция mkdir, которая в качестве аргументов принимает имя нового
каталога и некое число, определяющее права доступа к созданному каталогу.
Права доступа задаются как число, интерпретируемое во внутреннем формате
прав доступа. Если вы не знакомы с внутренним форматом прав доступа,
обратитесь к man-странице chmod(2). Если вам некогда с этим разбираться,
просто укажите права доступа как 0777, и все будет нормально*. Вот пример
создания каталога с именем gravelpit:
mkdir{"gravelpit",0777) || die "cannot mkdir gravelpit: $!";
UNIX-команда rmdir( 1) удаляет пустые каталоги. В Perl есть ее эквивалент
с тем же именем. Вот как можно сделать Фреда безработным:
rmdir("gravelpit") I i die "cannot rmdir gravelpit: $!";
Хотя эти Perl-операции используют преимущества системных вызовов с такими
же именами, они будут выполняться (хотя и чуточку медленнее) даже в
системах, не поддерживающих такие вызовы. Perl вызывает утилиты mkdir и
rmdir (или как там они называются у вас в системе) автоматически.
Изменение прав доступа
Права доступа к файлу или каталогу определяют, кто (в широком смысле
слова) и что может делать с этим файлом или каталогом. В UNIX
общепринятый метод изменения прав доступа к файлу - применение команды
chmod(l). (Если вы не знакомы с этой операцией, обратитесь к ее шап-стра-
нице.) В Perl права доступа изменяются с помощью функции chmod. Эта
функция получает в качестве аргументов заданный восьмеричным числом режим
доступа и список имен файлов и пытается изменить права доступа ко всем
этим файлам в соответствии с указанным режимом. Чтобы сделать файлы fred
и barney доступными в режимах чтения и записи для всех пользователей,
нужно выполнить такую операцию:
chmod(0 6 66,"fred","barney");
Режим 06 6 6 обозначает чтение и запись для владельца, группы и прочих
пользователей, т.е. как раз то, что нам нужно.
В данном случае вы не создаете каталог с самыми широкими правами доступа.
Определить права доступа вам также поможет текущая маска доступа umask
вашего процесса. В UNIX-системах см. описание команды shell umask или
man-страницу umask(2).
178
Изучаем PERL
Функция chmod возвращает число файлов, для которых были успешно изменены
права доступа (даже если в результате фактически ничего не изменилось).
Таким образом, в отношении контроля ошибок она работает аналогично
функции unlink. Поэтому, чтобы изменить права доступа к файлам fred и
barney и выполнить контроль ошибок в каждом случае, необходимо
использовать следующую конструкцию:
foreach $file ("fred","barney") (
unless chmod (0666,$flie) {
warn "hmm... couldn't chmod $file.\$!";
)
}
Изменение принадлежности
Каждый файл в файловой системе (обычный, каталог, файл устройства и т.д.)
имеет владельца и группу. Эти параметры определяют, кому принадлежат
права доступа, установленные для файла по категориям "владелец" и
"группа" (чтение, запись и (или) выполнение). Владелец и группа
определяются в момент создания файла, но при определенных обстоятельствах
вы можете изменить их. (Эти обстоятельства зависят от конкретной
разновидности UNIX, с которой вы работаете; подробности см. на man-
странице chown.)
Функция chown получает идентификатор пользователя (UID), идентификатор
группы (GID) и список имен файлов и пытается изменить принадлежность
каждого из перечисленных файлов в соответствии с указанными
идентификаторами. Успешному результату соответствует ненулевое значение,
равное числу файлов, принадлежность которых изменена (как в функциях
chmod и unlink). Обратите внимание: вы одновременно меняете и владельца,
и группу. Если какой-то из этих идентификаторов вы менять не хотите,
поставьте вместо него -1. Помните, что нужно использовать числовые UID и
GID, а не соответствующие символические имена (хотя команда chmod и
принимает такие имена). Например, если UID файла fred - 1234, а
идентификатор группы stoners, которой этот файл принадлежит по
умолчанию,- 35, то в результате применения следующей команды файлы slate
и granite переходят к пользователю fred и его группе:
chown(1234, 35/ "slate", "granite"); # то же, что и
# chown fred slate granite
# chgrp stoners slate granite
В главе 16 вы узнаете, как преобразовать fred в 1234 и stoners в 35.
ItS. Манипулирование файлами и каталогами
179
Изменение меток времени
С каждым файлом связан набор из трех меток времени. Мы вкратце упоминали
о них, когда говорили о том, как получить информацию о файле: это время
последнего доступа, время последнего изменения и время последнего
изменения индексного дескриптора. Первым двум меткам времени можно
присвоить произвольные значения с помощью функции utime (которая
соответствует системному вызову utime в ОС UNIX). При установке двух этих
Предыдущая << 1 .. 65 66 67 68 69 70 < 71 > 72 73 74 75 76 77 .. 124 >> Следующая