[ Страница назад | Страница вперед | Содержание | Индекс | Библиотека | Юридическая информация | Поиск ]

Программирование: Разработка и отладка программ


Создание связей - Информация для программистов

Связь - это соответствие между именем файла и i-узлом (жесткая связь) или между двумя именами файлов (символьная связь). Связывание обеспечивает доступ к i-узлу (Работа с i-узлами JFS) по нескольким именам. В записях каталога имена файлов и i-узлы указываются попарно. Имена файлов упрощают работу пользователя с файлами, а i-узлы содержат фактические дисковые адреса данных файла. Счетчик всех ссылок на i-узел хранится в поле i_nlink i-узла. Функции создания и уничтожения связей работают с именами файлов, а не с дескрипторами файлов (Работа с дескрипторами файлов). Поэтому при создании связей файлы можно не открывать.

Процессы могут считывать и изменять содержимое i-узла под любым из связанных с ним имен файлов. В данной операционной системе есть два типа связей: жесткая и символьная.

Жесткие связи


link Функция создания жесткой связи. Наличие жесткой связи гарантирует существование файла, так как жесткая связь увеличивает на единицу счетчик связей в поле i_nlink i-узла.
unlink Функция освобождения связи. Если освободить все жесткие связи с i-узлом, файл становится недоступным.

Владельцем файла является создатель исходного файла, он же определяет права доступа к файлу. С другой стороны, все жесткие связи для операционной системы равноправны. Жесткие связи должны связывать имена файлов с i-узлами, расположенными в той же файловой системе, так как номер i-узла является уникальным только в пределах данной файловой системы.

Жесткая связь всегда устанавливается для конкретного файла, поскольку при создании жесткой связи создается запись каталога, в которой указывается соответствие имени нового файла и i-узла.

Пример: если файл /u/tom/bob связан с файлом /u/jack/foo, то счетчик связей в поле i_nlink файла foo равен 2. Обе жесткие связи равнозначны. Если удалить /u/jack/foo, то он будет продолжать существовать под именем /u/tom/bob и будет доступен пользователям, обращающимся к каталогу tom. Однако владельцем файла останется jack, даже если файл /u/jack/foo удален. Пространство, выделенное для файла, считается пространством пользователя jack и учитывается при определении его лимита дискового пространства. Изменить владельца файла можно с помощью функции chown.

Символьные связи


symlink Функция создания символьной связи.

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

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

readlink Функция чтения содержимого символьной связи. Многие функции (в том числе open и stat) работают с именами файлов, указанными в символьной связи.
lstat Эта функция служит для создания отчета о состоянии файла, содержащего символьную связь, и не выполняет переход по указанной связи. Список процедур, выполняющих переход по символьной связи, приведен в описании функции symlink.

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

Пример: Символьная связь с файлом /u/joe/foo - это файл, в котором хранится строка /u/joe/foo. Если владелец файла foo удалит его, то вызовы функций по символьной связи будут приводить к ошибке. Если затем владелец создаст новый файл с именем foo в том же каталоге, то связь будет указывать на новый файл. Этот тип связи потому и называется гибкой связью, что i-узел, с которым она установлена, можно заменить другим.

В выводе команды ls -l символ l в первой позиции означает символьную связь. В последнем столбце вывода связи между файлами представлены в виде Путь2 -> Путь1 (или Новое_имя -> Старое_имя).

unlink Функция удаления записи каталога. Параметр Путь указывает имя отсоединяемого файла. По завершении вызова unlink счетчик связей i-узла уменьшается на 1.
remove Эта функция также удаляет имя файла путем вызова функции unlink или rmdir.

Связи с каталогами


mkdir Эта функция создает записи новых каталогов, создавая тем самым жесткие связи с с i-узлом, соответствующим новому каталогу.

Если нужно создать дополнительную связь с каталогом, рекомендуется создать символьную связь. Символьные связи не нарушают работу записей каталогов . и .. и поддерживают пустые стандартные каталоги. Пример пустого каталога /u/joe/foo и значений i_nlink приведен на рисунке в разделе Основные сведения о связях каталога.

/u

68

j o e 0

/u/joe
mkdir ("foo", 0666)

68

n 0 0 0



n n 0 0
235

f o o 0

/u/joe/foo

235

n 0 0 0
68

n n 0 0

Значений i_nlink

i = 68
n_link 3

Для i = 68 n_link равно 3 (/u; /u/joe; /u/joe/foo).

i = 235
n_link 2

Для i = 235 n_link равно 2 (/u/joe; /u/joe/foo ).

Связи с каталогами - Обзор

rmdir и remove Функции удаления связей с каталогами

Связанная информация

Глава 5, Файловые системы и каталоги

Каталоги JFS

Работа с файлами

Команда ls

Функции chown, link, statx, lstat , stat, fstatx, fstat, fullstat, ffullstat , open, openx, creat, symlink, remove, rmdir и unlink


[ Страница назад | Страница вперед | Содержание | Индекс | Библиотека | Юридическая информация | Поиск ]