Книга: Программирование для Linux. Профессиональный подход
Б.4. Взаимосвязь с библиотечными функциями ввода-вывода
Б.4. Взаимосвязь с библиотечными функциями ввода-вывода
Выше уже говорилось о том. что функции ввода-вывода стандартной библиотеки языка С реализованы на основе низкоуровневых функций. Иногда удобнее работать с одними, иногда — с другими.
Если файл был открыт с помощью функции fopen()
, то узнать его дескриптор позволяет функция fileno()
. Она принимает аргумент типа FILE*
и возвращает соответствующий ему дескриптор. Например, можно открыть файл с помощью библиотечной функции fopen()
, но осуществить в него запись посредством функции writev()
:
FILE* stream = fopen(filename, "w");
int file_descriptor = fileno(stream);
writev(file_descriptor, vector, vector_length);
Учтите, что переменные stream
и file_descriptor
соответствуют одному и тому же открытому файлу. Если выполнить следующую функцию, дескриптор file_descriptor
станет недействительным:
fclose(stream);
Аналогичным образом следующая функция делает недействительным файловый указатель stream
:
close(file_descriptor);
Чтобы получить файловый указатель, соответствующий дескриптору, воспользуйтесь функцией fdopen()
. Ее аргументами является дескриптор и строка, определяющая режим создания файлового потока. Синтаксис строки аналогичен синтаксису второго аргумента функции fopen()
, а задаваемый режим должен быть совместим с режимом открытия файла. Например, файлу, открытому для чтения, соответствует режим r
, а файлу, открытому для записи, — режим w
. Как и в случае функции fileno()
, файловый указатель и дескриптор ссылаются на один и тот же файл, поэтому закрытие одного сделает недействительным другой.
- Включение и отключение синхронного вывода
- 2. Правила вывода Армстронга
- 3. Производные правила вывода
- 1.6 Драйверы и буферы ввода-вывода
- Управление функциями узла
- Глава 6 BIOS – базовая система ввода-вывода
- 5.2.2.2. Устройства ввода информации в персональный компьютер
- Можно ли входить в систему без ввода имени и пароля?
- Правила ввода формул
- 6.2. Модели ввода-вывода
- Обзор методов асинхронного ввода
- Устройство ввода-вывода