Книга: Программирование для Linux. Профессиональный подход
5.4.3. Перенаправление стандартных потоков ввода, вывода и ошибок
5.4.3. Перенаправление стандартных потоков ввода, вывода и ошибок
Часто требуется создать дочерний процесс и сделать один из концов канала его стандартным входным или выходным потоком. В этом случае на помощь приходит функция dup2()
, которая делает один файловый дескриптор равным другому. Вот как, например, можно связать стандартный входной поток с файлом fd
:
dup2(fd, STDIN_FILENO);
Символическая константа STDIN_FILENO
представляет дескриптор файла, соответствующий стандартному потоку ввода (значение этого дескриптора равно 0). Показанная функция закрывает входной поток, а затем открывает его под видом файла fd
. Оба дескриптора (0 и fd
) будут указывать на одну и ту же позицию в файле и иметь одинаковый набор флагов состояния, т.е. дескрипторы станут взаимозаменяемыми.
Программа, представленная в листинге 5.8, с помощью функции dup2()
соединяет выходной. Конец канала со входом команды sort
.[16] После создания канала программа "делится" функцией fork()
на два процесса. Родительский процесс записывает в канал различные строки, а дочерний процесс соединяет выходной конец канала со своим входным потоком, после чего запускает команду sort
.
- Перенаправление ввода
- Достоинства и недостатки потоков
- Перехват ошибок
- Обработка перехваченных ошибок
- Включение и отключение синхронного вывода
- 2. Правила вывода Армстронга
- 3. Производные правила вывода
- 1.6 Драйверы и буферы ввода-вывода
- 6.2. Создание и автоматическое заполнение бланков стандартных документов
- Приложение 10. Коды ошибок
- B1.7. Функции обработки ошибок
- Глава 6 BIOS – базовая система ввода-вывода