П О Р Т А Л                            
С Е Т Е В Ы Х                          
П Р О Е К Т О В                        
  
Поиск по сайту:
                                                 
Главная

О проекте

Web-мастеру
     HTML & JavaScript
     SSI
     Perl
     PHP
     XML & XSLT
     Unix Shell

MySQL

Безопасность

Хостинг

Другое








Самое читаемое:

Учебник PHP - "Для Чайника".
Просмотров 174969 раз(а).

Иллюстрированный самоучитель по созданию сайтов.
Просмотров 71908 раз(а).

Учебник HTML.
Просмотров 72039 раз(а).

Руководство по PHP5.
Просмотров 42649 раз(а).

Хостинг через призму DNS.
Просмотров 49124 раз(а).

Подборка текстов стандартных документов.
Просмотров 43061 раз(а).

Учебник PHP - Самоучитель
Просмотров 49406 раз(а).

Документация на MySQL (учебник & справочное руководство)
Просмотров 49642 раз(а).

Внешние атаки...
Просмотров 40205 раз(а).

Учебник PHP.
Просмотров 35223 раз(а).

SSI в примерах.
Просмотров 26519 раз(а).



 
 
| Добавить в избранное | Сделать стартовой | Помощь




Глава 13: Манипулирование файлами и каталогами
13.3 Создание для файла альтернативных имен: связывание ссылками

Иногда пользователю нужно, чтобы у файла было два, три, а то и дюжина имен (как будто одного имени файлу не хватает!). Операция присвоення файлу альтернативних имен называется создание ссылок. Две основних формы создания ссылок — это создание жестких ссылок и создание символических (или мягких) ссылок. Не все виды файлових систем подцерживают оба типа сеилок или хотя би один из них. В этом разделе описани файловие системи, соответствующие стандарту POSIX.

Жесткие и символические ссылки

Жесткая ссылка на файл неотличима от его исходного имени; ни одна из жестких ссилок не является более "реальним именем" для файла, чем любая другая.

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

Каждая жесткая ссылка на файл должна располагаться в той же файловой системе (обычно это диск или часть диска). По этой причино нельзя создать новую жесткую ссилку на файл, находящийся в другой файловой системе.

В большинстве систем применение жестких ссилок для каталогов огра-ничено. Чтобы структура каталогов имела вид дерева, а не произвольную форму, для каталога допускается наличие только одного имени от корня, ссылки из "точечного" файла на данный каталог, и семейства жестких ссылок "точка-точка" из каждого из его подкаталогов. Если ви попитаетесь создать еще одну жесткую ссылку на каталог, то получите сообщение об ошибке (если только вы не привилегированный пользователь — тогда вам придется провести всю ночь за восстановлением своей поврежденной файловой системы).

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

Например, если символическая ссылка fred содержит имя barney, то указание открыть файл fred — это, на самом деле, указание открыть файл barney. Если barney — каталог, то fred/wilma обозначает barney/wilma.

Содержимое символической ссылки (i.e. имя, на которое указывает символическая ссылка) не обязательно должно обозначать существующий файл или каталог. В момент, когда создаетсяу/'erf, существование barney вовсе не обязательно. Более того, Ьатеу может никогда и не появиться! Содержимое символической ссылки может указывать на путь, который ведет за пределы текущей файловой системи, поэтому можно создавать символическую ссылку на файл, находящийся в другой смонтированной файловой системо.

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

Жесткая ссылка защищает содержимое файла от уничтожения (потому что она считается одним из имен файла). Символическая же ссылка не может уберечь содержимое файла от исчезновения. Символическая ссылка может указывать на другие смонтированные файловые системи, а жесткая — не может. Для каталога может быть создана только символическая ссылка.

Создание жесткиж и символических ссылок в Perl

В ОС UNIX жесткие ссылки создают с помощью команды ln. Например, команда

ln fred bigdumbguy

позволяет создать жесткую ссилку из файла fred (который должен существовать) на bigdumbguy. В Perl это выражается так:

link("fred","bigdumbguy") || die "cannot link fred to bigdumbguy";

Функция link принимает два параметра — старое имя файла и новий псевдоним для этого файла. Если ссылка создана успешно, link возвращает значение "истина". Как и команда mv, UNIX-команда In позволяет указывать в качестве псевдонима только каталог (без имени файла). Функция link (как и функция rename) не настолько умна, поэтому вы должны указывать полное имя файла явно.

При создании жесткой ссылки старое имя не может быть именем каталога*, а новый псевдоним должен указывать на ту же файловую систему. (Эти ограничения частично обусловили необходимость создания символических ссылок.)

* Если только вы не привелигированный пользователь и не любите забавляться с командой fsck, восстановливая поврежденную файловую систему.

В системах, которые поддерживают символические ссылки, в команде ln может использоваться опция -s, которая создает символическую ссылку. Например, если необходимо создать символическую ссылку из barney на neighbor (чтобы обращение к neighbor фактически было обращением к barney), следует использовать команду

ln -s barney neighbor

В Perl для этого применяется функция symlink:

symlink("barney","neighbor") || die "cannot symlink to neighbor";

Отметим, что barney необязательно должен существовать — ни сейчас, ни в будущем. В этом случае обращение к neighbor возвратит нечто туманное вроде No such file or directory.

Когда вы вызываете ls -l для каталога, содержащего символическую ссылку, вы получаете как имя этой ссылки, так и информацию о том, куда она указывает. В Perl эту же информацию можно получить с помощью функции readlink, которая по принципу работы удивительно похожа на системний вызов с тем же именем: она возвращает имя, на которое указывает заданная символическая ссылка. Так, в результате выполнения операции

if (defined ($х = readlink("neighbor"))) {
  print "neighbor points at '$x'\n";
}

вы получите сведения о barney, если все нормально. Если выбранная символическая ссылка не существует, не может быть прочитана или вообще не является таковой, readlink возвращает undef (т.е. вданном случае "ложь") — именно поэтому мы ее здесь и проверяем.

В системах, не поддерживающих символические ссылки, обе функции — и symlink, и readlink — потерпят неудачу и выдадут сообщения об ошибке. Perl может "спрятать" от вас некоторые зависящие от конкретной системи особенности, но некоторые все равно проявляются. Это как раз одна из них.

Назад | Вперед
Содержание (общее) | Содержание раздела



Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:
 





Copyright © 2005-2016 Project.Net.Ru