Книга: Разработка приложений в среде Linux. Второе издание
11.2.1. Файловые дескрипторы
11.2.1. Файловые дескрипторы
Когда процесс получает доступ к файлу (что обычно называют открытием файла), то ядро возвращает ему файловый дескриптор, который затем используется процессом для всех операций с файлом. Файловые дескрипторы — это маленькие положительные целые числа, которые служат индексами массива открытых файлов, создаваемого ядром для каждого процесса.
Первые три файловых дескриптора для процессов (0, 1 и 2) имеют стандартное назначение. Первый, 0, известен как стандартный ввод (stdin) и является местом, откуда программы должны получать свой интерактивный ввод. Файловый дескриптор 1 называется стандартным выводом (stdout), и большая часть вывода программ должна быть направлена в него. Сообщения об ошибках должны направляться в стандартный поток ошибок (stderr), который имеет файловый дескриптор 2. Стандартная библиотека С следует этим правилам, поэтому gets()
и printf()
используют stdin и stdout соответственно, и это соглашение дает возможность командным оболочкам правильно перенаправлять ввод и вывод процессов.
Заголовочный файл <unistd.h>
представляет макросы STDIN_FILENO
, STDOUT_FILENO
и STDERR_FILENO
, которые вычисляются как файловые дескрипторы stdin, stdout и stderr соответственно. Использование этих символических имен делает код более читабельным.
Многие из файловых операций, которые манипулируют файловыми узлами inode, доступны в двух формах. Первая форма принимает в качестве аргумента имя файла. Ядро использует этот аргумент для поиска inode файла и выполняет соответствующую операцию над ним (обычно это включает следование символическим ссылкам). Вторая форма принимает файловый дескриптор в качестве аргумента и выполняет операцию над inode, на который он ссылается. Эти два набора системных вызовов используют похожие имена, но системные вызовы, работающие с файловыми дескрипторами, имеют префикс f. Например, системный вызов chmod()
изменяет права доступа для файла, ссылка на который осуществляется по имени; fchmod()
устанавливает права доступа к файлу, ссылаясь на него по указанному файловому дескриптору.
Чтобы меньше тратить слов, мы представим обе версии системных вызовов, если они существуют, а обсуждать будет только первую из их (та, которая использует имена файлов).
- Файловые дескрипторы
- 4.6. ФАЙЛОВЫЕ СТРУКТУРЫ
- 11.2. Основные файловые операции
- Дескрипторы файлов. Функция FreeFile
- Глава 6 Файловые системы
- 6.4 Другие файловые системы
- 6.6 Файловые системы для сетей хранения данных
- Файловые типы
- 2.3.2. Файловые системы
- Урок 4.4. Файловые менеджеры
- 2.4. Файловые системы
- Глава 8 Файловые системы и обходы каталогов