WebClub - Всероссийский Клуб Веб-разработчиков
WebClub.RU » Архив » Дескриптор каталога Perl

Дескриптор каталога Perl


Дата публикации: 17-03-2013

Для названий дескрипторов каталогов, так же как для дескрипторов файлов, нельзя выбирать зарезервированные слова, их рекомендуется набирать прописными буквами. Причем дескриптор файла FRED и дескриптор каталога FRED не связаны между собой. В Perl имеется несколько функций, позволяющих работать с каталогами. Можно создать каталог с помощью функции mkdir(), стереть — с использованием rmdir (), а для перемещения по дереву каталогов служит chdir().

Чтобы получить список файлов, находящихся в каком-либо каталоге, используются функции: opendir(), readdir() и closedir().Ниже приведена программа, показывающая, как вывести список всех Perl-программ, оканчивающихся на pl в текущем каталоге:

opendir(DIR, ”.”); # открыть каталог
@files = sort(grep(/pl$/, readdir(DIR))); # массив файлов
closedir(DIR);     # закрыть каталог
foreach (@files) { 
print(”$_\n”) unless -d; # выводит список файлов
}

Алгоритм ее работы таков:

    открыть текущий каталог как дескриптор каталога с помощью функции DIR;
    считать список файлов функцией readdir(), показать только оканчивающиеся на pl и затем отсортировать список и связать его с массивом @files;
    закрыть каталог;
    вывести содержимое массива на экран.

Функция chdir в Perl имеет один аргумент типа выражения. При его вычислении определяется имя текущего каталога. В случае его успешного изменения возвращается значение true, а при неудачном — false. Например, чтобы перейти в корень дерева каталогов и вывести там список всех файлов, нужно сделать следующее:

chdir (”/”) || die ”Невозможно перейти в / ($!)”;
opendir(DIR, ”.”);
  @files = sort(grep(/$_/, readdir(DIR)));
closedir(DIR);
foreach (@files) {    
  print(”$_\n”) unless -d;
}

Круглые скобки после chdir ставить необязательно.

Синтаксис функции создания каталога:

mkdir (DIRNAME, MODE), 

где DIRNAME — имя каталога, заключенное в кавычки, а MODE — права доступа. Так, чтобы создать каталог MYDIR, всем доступный и предоставляющий равные права, необходимо ввести команду

mkdir (”MYDIR”, 0777) || die ”Невозможно создать MYDIR: $!”;

Если требуется удалить каталог, на помощь придет функция rmdir:

rmdir (”MYDIR”) || die ”Невозможно удалить MYDIR: $!”;

Эта Unix-команда позволяет удалять только пустые каталоги. В Unix, как и в Windows NT, есть такое понятие, как право доступа к файлам и каталогам. С помощью функции chmod() можно устанавливать для файлов уникальные атрибуты. Например, чтобы сделать файлы «1.txt» и «2.txt» доступными для чтения и записи всем пользователям, нужно выполнить операцию

chmod  (0666, ”1.txt”, ”2.txt”);

Восьмеричное число, находящееся в круглых скобках, — цифровое представление режима доступа, а цифра 0666 обозначает чтение и запись для всех пользователей.

Чтобы изменить права доступа к файлам «1.txt» и «2.txt» и проконтролировать ошибки, нужно использовать следующую конструкцию:

foreach $files (”1.txt”, ”2.txt”) {
 unless chmod (0666, $files) {
   warn ”Невозможно изменить права доступа для $files.\n$!”;
 }
}

Каждый файл и каждый каталог обладают двумя параметрами — «владелец» и «группа», которые определяют, кому принадлежат права доступа, установленные для файла по категориям (чтение, запись и/или создание). Значения параметров выявляются при создании файла. Покажем, как можно изменять их для списка файлов. Первые два элемента списка должны представлять собой числовой UID (идентификатор пользователя) и GID (идентификатор группы):

$cnt = chown $uid, $gid, ‘foo’, ‘bar’;
chown $uid, $gid, @filenames;

Успешному выполнению операции соответствует ненулевое значение, равное числу файлов, принадлежность которых изменена (как в функции chmod). В листинге 1 приведен пример поиска нечисловых UID в файле passwd.

Листинг 1

print ”Пользователь: ”;
$user = ;
chop($user);
print ”Файлы: ”
$pattern = ;
chop($pattern);
open(pass, ‘/etc/passwd’)
    || die ”Не могу открыть passwd: $!\n”;
while () {
    ($login,$pass,$uid,$gid) = split(/:/);
    $uid{$login} = $uid;
    $gid{$login} = $gid;
}
@ary = <${pattern}>;    # Получить имена файлов
if ($uid{$user} eq ‘’) {
    die ”$user отсутствует в файле passwd”;
}
else {
    chown $uid{$user}, $gid{$user}, @ary;
}

Существуют также операции переименования и удаления файлов. Во втором случае используют функцию unlink(), которая убирает все файлы из списка, заданного в качестве параметра, и возвращает список успешно удаленных:

    $cnt = unlink ‘1.txt’, ‘2.txt’, ‘3.txt’;

или

    @goners = (‘1.txt’, ‘2.txt’, ‘3.txt’);
    unlink @goners;

или

    unlink <*.txt>;

Функция unlink() не позволяет убирать каталоги, если пользователь не обладает правами администратора системы. Учтите, что ее следует применять крайне осторожно, а при работе с каталогами целесообразно предпочесть rmdir ().

Чтобы переименовать файл, нужно воспользоваться функцией rename. При успешном выполнении она возвращает результат, равный 1, иначе 0. С помощью этой функции можно также переносить файлы из одного каталога в другой, например:

rename (”e:/1.txt”,”d:/1.txt”); 

или

rename (”/docs/1.txt”,”/docs/add/1.txt”);

Если же вы хотите просто переименовать какой-то файл, то пути к файлам должны совпадать, например:

rename (”1.txt”,”2.txt”);

Существуют и другие команды для работы с файлами. О них более подробно можно узнать из источников информации, приведенных в конце статьи.

Популярное

Не так давно в сети появился новый сервис, под названием Dead Man Zero. Этот сервис сделал...
Рынок социальных площадок уже давно стал стабильным. Несмотря на то, что время от времени...
Artisteer 4 – единственный в своем роде продукт, позволяющий автоматизировать работу над созданием...
Март 2017 (1)
Февраль 2017 (3)
Январь 2017 (1)
Август 2016 (1)
Май 2016 (2)
Ноябрь 2015 (1)

Карта сайта: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41

Друзья сайта

Хотите продать свой сайт?
- Мы быстро и удобно для Вас сможем его купить:
  • Заявка на продажу сайта
  • Раcсматриваем цены на каждый сайт в индивидуальном порядке.

    Случайная цитата

    Неизвестный автор:

    "Хедер всему голова."

    Опрос

    Какой текстовый редактор Вы используете?

    OpenOffice
    AbiWord
    Notepad++
    UltraEdit
    PSPad
    Microsoft Office
    Microsoft Блокнот
    Другой...