Поток ввода называется ``стандартным вводом (standard input)''; поток вывода называется ``стандартным выводом (standard output)''; а поток сообщений об ошибках называется ``стандартными ошибками (standard error)''. Эти термины были сокращены для названий файлов, на которые указывают ссылки, а именно: stdin stdout и stderr
Каждый из этих терминов является макросом stdio(3), указывающим на FILE; возможно их использование с такими функциями, как fprintf(3) или fread(3).
Переменные типа FILE являются буферизируемыми оболочками описателей файлов Unix. Доступ к этим файлам можно осуществить также при помощи низкоуровнего интерфейса для работы с файлами и с использованием таких функций, как read(2) и lseek(2). Целые описатели файлов, ассоциированных с потоками stdin stdout и stderr будут соответственно равны 0, 1 и 2. Константы STDIN_FILENO, STDOUT_FILENO и STDERR_FILENO определены этими значениями в <unistd.h>.
Заметьте, что совместное использование FILE и описателей низкого уровня может привести к непредвиденным последствиям, этого следует избегать при любом удобном случае. Для "мазохистов": POSIX.1, раздел 8.2.3, детально описывает, как определяется такая совместная работа. Общее правило гласит, что описатели поддерживаются ядром, а stdio всего лишь библиотека. Это означает, например, что после выполнения операции дочерний процесс наследует все описатели открытых файлов, но все старые потоки становятся недоступными.
Так как stdin stdout и stderr определены как макросы, то наследовать их нельзя. Стандартные потоки могут ссылаться на другие файлы при помощи библиотечной функции freopen(3), специально разработанной для возможности наследования stdin stdout и stderr Стандартные потоки можно закрыть вызовом exit(3) и при обычном завершении программы.
Закладки на сайте Проследить за страницей |
Created 1996-2024 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |