Файлы

Для организации всех файлов в системе ядро поддерживает структуру одного иерархического каталога. Основу этой иерархии составляет корневой каталог по имени / (слеш). Все файлы и каталоги являются дочерними или более отдалёнными потомками корневого каталога.

Типы файлов

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

Термин файл обычно используется для обозначения файла любого типа, а не только обычного файла.

Каталоги и ссылки

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

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

Каждый каталог содердит как минимум две записи: . (точка), которая представляет ссылку на сам каталог, и .. (точка-точка), которая является ссылкой на его родительский каталог - тот каталог, что расположен над ним в иерархии. Каждый каталог, за исключением корневого, имеет родительский каталог. Для корневого каталога запись .. является ссылкой на него самого (таким образом, обозначение /.. - то же самое, что и /).

Текущий рабочий каталог

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

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

Узнать текущий рабочий каталог

host$ pwd /home/username/projects

Сменить текущий каталог

host$ cd /etc/apache2

Модель файлового ввода-вывода

Одной из отличительных черт модели ввода-вывода в системах UNIX является понятие универсальности ввода-вывода. Это означает, что одни и те же системные вызовы (open(), read(), write(), close() и т.д.) используются для выполнения ввода-вывода во всех типах файлов, включая устройства. (Ядро преобразует запросы приложений на ввод/вывод в соответствующие операции файловой системы или драйверов устройств, выполняющие ввод/вывод в отношении целевого файла или устройства.) Из этого следует, что программа, использующая эти системные вызовы, будет работать с любым типом файлов.

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

Многие приложения и библиотеки интерпретируют символ новой строки, или символ конца строки (имеющий десятичный ASCII-код 10) как завершающий одну строку текста и начинающий другую строку. В системах UNIX отсутствует символ конца файла, и конец файла определяется при чтении, не возвращающем данные.

Библиотека stdio

Для выполнения файлового ввода-вывода программы обычно исользуют функции ввода-вывода, содержащиеся в стандартной библиотеке языка C. Этот набор функций, известный как библиотека stdio, включает функции fopen(), flose(), scanf(), printf(), fgets(), fputs() и т.д. Функции stdio наслаиваются поверх системных вызовов ввода-вывода (open(), close(), read(), write() и т.д.).

Поддержите проект, если он помог вам

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