Системные вызовы для управления каталогами

В этом разделе мы рассмотрим некоторые системные вызовы, относящиеся скорее к каталогам или к файловой системе в целом, чем к отдельным файлам, как в предыдущем разделе. Первые два вызова — mkdir и rmdir — соответственно создают и удаляют пустые каталоги.
Следующий вызов — link. Он позволяет одному и тому же файлу появляться под двумя или более именами, зачастую в разных каталогах. Этот вызов обычно используется, когда несколько программистов, работающих в одной команде, должны совместно использовать один и тот же файл. Тогда этот файл может появиться у каждого из них в собственном каталоге, возможно, под разными именами. Совместное использование файла отличается от предоставления каждому члену команды личной копии; наличие общего доступа к файлу означает, что изменения, которые вносит любой из представителей, тут же становятся видимыми другим, поскольку они используют один и тот же файл. А при создании копии файла последующие изменения одной копии не влияют на другие.

Чтобы увидеть, как работает вызов link, рассмотрим ситуацию, показанную на рис. 1.19, а. У каждого из двух пользователей с именами ast и jim есть собственные каталоги, в которых имеется ряд файлов. Если ast выполнит программу, содержащую системный вызов

link("/usr/jim/memo", "/usr/ast/note");

то файл memo в каталоге jim теперь будет входить в каталог ast под именем note. После этого /usr/jim/memo и /usr/ast/note будут ссылаться на один и тот же файл. Попутно следует заметить, что место, где хранятся каталоги пользователей — /usr, /user, /home или какое-нибудь другое, определяет местный системный администратор.

Возможно, станет понятнее, что именно делает link, если разобраться в том, как он работает. Каждый файл в UNIX имеет свой уникальный номер — идентификатор, или i-номер. Этот i-номер является единственным для каждого файла индексом в таблице i-узлов (i-nodes). Каждый i-узел (i-node или inode) хранит информацию о том, кто является владельцем файла, где расположены его блоки на диске и т. д. Каталог — это просто файл, содержащий набор пар (i-номер, ASCII-имя). В первой версии UNIX каждый элемент каталога занимал 16 байт: 2 байта для i-номера и 14 байт для имени. Сейчас для поддержки длинных имен файлов требуется более сложная структура, но концептуально каталог по-прежнему является набором пар (i-номер, ASCII-имя). На рис. 1.19 у файла mail имеется i-номер 16 и т. д. Системный вызов link просто создает новый элемент каталога, возможно, с новым именем, используя i-номер существующего файла. На рис. 1.19, б один и тот же i-номер (70) имеется у двух элементов, которые таким образом ссылаются на один и тот же файл.

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

Рис. 1.19. Два каталога: а — перед созданием ссылки на файл /usr/jim/memo в каталоге ast;

б — после создания ссылки


Как уже упоминалось, системный вызов mount позволяет объединять в одну две файловые системы. Обычная ситуация такова: на разделе (или подразделе) жесткого диска находится корневая файловая система, содержащая двоичные (исполняемые) версии общих команд и другие интенсивно используемые файлы, а пользовательские файлы находятся на другом разделе (или подразделе). Затем пользователь может вставить USB-диск с файлами для чтения.

При помощи системного вызова mount файловая система USB-диска может быть подключена к корневой файловой системе (рис. 1.20). В языке C типичный оператор, выполняющий подключение («монтирование») файловой системы, выглядит так:

mount("/dev/sdb0", "/mnt", 0);

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

Рис. 1.20. Файловая система: a — до вызова mount; б —после вызова mount

После выполнения системного вызова mount для доступа к файлу на устройстве 0 можно использовать путь к нему из корневого или рабочего каталога, не обращая внимания на то, на каком устройстве он находится. Практически к любому месту дерева может быть подключено второе, третье и четвертое устройство. Вызов mount позволяет включать сменные носители в единую интегрированную файловую структуру, не обращая внимания на то, на каком устройстве находятся файлы. Хотя в этом примере фигурирует компакт-диск, жесткие диски или их части (часто называемые разделами — partition) также могут быть подключены этим способом. Аналогично могут быть подключены и внешние жесткие диски или флеш-накопители. Когда подключение файловой системы больше не требуется, она может быть отключена с помощью системного вызова umount.

1.6.4.

<< | >>
Источник: Э. ТАНЕНБАУМ Х. БОС. СОВРЕМЕННЫЕ ОПЕРАЦИОННЫЕ СИСТЕМ Ы 4-е ИЗДАНИЕ. 2015

Еще по теме Системные вызовы для управления каталогами:

  1. I. 1. СИСТЕМНЫЙ ПОДХОД КАК ИНСТРУМЕНТ ДЛЯ ПОСТРОЕНИЯ СИСТЕМНЫХ ОПИСАНИЙ
  2. Психологическая системность в управлении.
  3. Психологическая системность в управлении.
  4. Чудо, связанное с каталогом «Nightingale-Conant»
  5. I. СИСТЕМНЫЕ ОПИСАНИЯ - ГЛАВНЫЙ РЕЗУЛЬТАТ СИСТЕМНОГО ПОДХОДА В ПСИХОЛОГИИ
  6. § 45 Меры к охранению открывшегося наследства. – Опись. – Вызов наследников. – Утверждение в правах наследства. – Срок на явку наследников и вступление явившихся. – Особые правила для торгового сословия.
  7. Психология личности целостна, системна (принцип целостности, системности).
  8. ВЫЗОВ ВРАЧА
  9. СПТ откликается на вызов обстоятельств
  10. Быстрый вызов желаемого
  11. Бросьте себе вызов