Файлы иерархически организованы в каталогах. Каталог является разновидностью файла, но в отличие от обычных файлов каталог имеет структуру, наложенную на него системой. Процесс может прочесть каталог как обычный файл, но лишь ядру разрешается изменять каталог. Каталоги создаются с помощью системного вызова mkdir и удаляются с помощью системного вызова rmdir. До 4.2BSD системные вызовы mkdir и rmdir были реализованы через ряд системных вызовов link и unlink. Для добавления системных вызовов, явно создающих и удаляющих каталоги, было три причины.
1. Операция должна быть неделимой. Если в системе случится аварийный отказ, каталог не должен остаться сделанным наполовину, что могло бы случиться при использовании ряда операций link.
2. При запуске сетевой файловой системы создание и удаление файлов и каталогов должны быть неделимыми (атомарными), чтобы их можно было сериализовать.
3. При поддержке файловых систем, не относящихся к UNIX, таких, как файловая система NT, на других разделах диска эти файловые системы могут не поддерживать операции link. Хотя другие файловые системы могут поддерживать концепцию каталогов, они, возможно, не создают и не удаляют каталоги с помощью ссылок, как делает файловая система UNIX. Соответственно они могли бы создавать и удалять каталоги, лишь если были бы представлены явные запросы создания и удаления каталогов.
Системный вызов chown устанавливает владельца и группу файла, a chmod изменяет атрибуты прав доступа. Stat с именем файла может использоваться для получения свойств файла. Системные вызовы fchown, fchmod и fstat применяются для тех же операций с дескриптором, а не с именем файла. Системный вызов rename можно использовать, чтобы дать файлу в файловой системе новое имя, заменив одно из старых имен файла. Как и операции добавления и удаления каталогов, системный вызов rename был добавлен к 4.2BSD для обеспечения атомарности изменения имени в локальной файловой системе. Позже он явно пригодился для экспортирования операций переименования в другие файловые системы и по сети.
Системный вызов truncate был добавлен к 4.2BSD, чтобы обеспечить установку произвольного размера файла. Таким образом, название truncate неудачно, поскольку оно используется как для укорочения, так и для удлинения файла. Файлы могут содержать в себе дыры. Дыры являются пустыми областями в линейном пространстве файла, в которое никогда не записывались данные. Процесс может создать эти дыры, поместив указатель за текущим концом файла и что-то записав. В качестве альтернативы дыра может быть добавлена в конец файла путем использования системного вызова truncate для увеличения его размера. При чтении дыры интерпретируются системой как заполненные нулевыми байтами.
- 16/05/2010 11:00 - Терминалы
- 15/05/2010 20:27 - Файловое хранилище
- 14/05/2010 11:31 - Файловые системы
- 14/05/2010 02:47 - Интерфейс устройств
- 13/05/2010 20:26 - Поддержка нескольких файловых систем
- 13/05/2010 03:54 - Механизм взаимодействия сокетов
- 12/05/2010 18:13 - Устройства