Самьюэл Алекс
Шрифт:
Приложение Б
Низкоуровневый ввод-вывод
Программисты, пишущие Linux-программы на языке С. имеют в своем распоряжении два набора функций ввода-вывода. Один из них включен в стандартную библиотеку языка С:
41
В стандартной библиотеке языка C++ аналогичным целям служат потоки ввода-вывода.
Ядро Linux предоставляет собственные операции ввода-вывода, работающие на более низком уровне. В основном они имеют вид системных вызовов и обеспечивают самый непосредственный доступ к файловой системе. По сути, стандартные библиотечные функции реализованы на их основе. Низкоуровневые вызовы обеспечивают наибольшую эффективность операций ввода-вывода.
Б.1. Чтение и запись данных
Первая функция ввода-вывода, с которой сталкиваются те, кто начинают изучать язык С, называется
В низкоуровневых операциях ввода-вывода участвуют не файловые указатели, а дескрипторы. Дескриптор представляет собой целое число, обозначающее конкретный экземпляр файла, открытого в одном процессе. Файл можно открыть для чтения, записи, а также одновременно для чтения и записи. Файловому дескриптору не обязательно соответствует файл: это может быть другой системный компонент, способный передавать или принимать данные (аппаратное устройство, сокет, противоположный конец канала).
Для работы с описанными ниже низкоуровневыми функциями необходимо включить в программу файлы
Б.1.1. Открытие файла
Чтобы открыть файл и получить дескриптор для работы с ним, необходимо вызвать функцию
Если второй аргумент равен
Существуют и другие флаги, определяющие режим открытия файла. Все они могут объединяться с помощью операции побитового ИЛИ. Перечислим наиболее распространенные флаги.
■
■
■
Когда в функции
Программа, представленная в листинге Б.1, создает файл, имя которого задано в командной строке. Функции