FILE *stdin;
FILE *stdout;
FILE *stderr;
Поток соотносится с внешним файлом (который также может быть физическим устройством) при открытии файла. Такое открытие может вызвать создание нового файла. Создание существующего файла вызовет потерю его содержимого. Если файл не может поддерживать запросы позиционирования, то индикатор позиции в файле (нулевой байт), соответствующий потоку, устанавливается в начале файла (если только файл открыт не в режиме добавления). Если используется режим добавления, то индикатор позиции в файле будет указывать на конец файла. Индикатор позиции обрабатывается последующими считывающими, записывающими и позиционными запросами. Все операции ввода осуществляются так, как если бы все символы были безошибочно считаны вызовом функции fgetc(3); а вывод осуществляется, как если бы все символы были успешно считаны вызовом функции fputc(3).
Ассоциация потока с файлом прекращается при закрытии файла. Потоки вывода "очищаются" (любое содержимое незаписанного буфера передается в системное окружение) перед тем, как ассоциирование прекратится. Значение указателя на FILE после закрытия файла определить будет невозможно.
Впоследствии файл может быть открыт еще раз той же самой или другой программой, а его содержание может быть изменено. Если функция завершает работу и возвращает значения своему родителю или если вызывается функция exit(3), то перед закрытием программы закрываются все открытые файлы (и, следовательно, "очищаются" все потоки вывода). Другие методы закрытия программ, как, например, abort(3), не всегда приводят к корректному закрытию файлов.
При запуске программы предопределяются три текстовых потока, которые не следует открывать "явно": --- standard input (для чтения стандартного ввода), --- standard output (для записи стандартного вывода) и standard error (для записи вывода диагностики). Названия потоков сокращены до stdin,stdout и stderr. Когда стандартный поток вывода ошибок открыт, то он не полностью буферизирован; стандартные потоки ввода и вывода полностью буферизируются только при условии, что они не ссылаются на какое-либо интерактивное устройство.
Потоки вывода, ссылающиеся на устройства терминала, всегда буферизируются построчно (по умолчанию), и всякий раз при обращении потока ввода к терминалу они автоматически записываются. В случаях, когда после вывода на терминале части строки объем производимых вычислений велик, необходимо выполнять fflush(3) стандартного вывода перед продолжением вычислений - только в этом случае будет выводиться остальная часть строки.
Библиотека stdio является частью библиотеки libc, а функции автоматически загружаются по мере надобности компиляторов cc(1) и pc(1). Раздел СИНТАКСИС страниц руководства описывает: какие файлы заголовков необходимо использовать, как выглядят объявления функций и какие внешние переменные представляют интерес для работы.
Нижеследующий список состоит из макросов; эти названиия не могут быть использованы вновь без удаления, в первую очередь, их определения с помощью #undef: BUFSIZ, EOF, FILENAME_MAX, FOPEN_MAX, L_cuserid, L_ctermid, L_tmpnam, NULL, SEEK_END, SEEK_SET, SEE_CUR, TMP_MAX, clearerr, feof, ferror, fileno, fropen, fwopen, getc, getchar, putc, putchar, stderr, stdin, stdout. Функции feof, ferror, clearerr, fileno, getc, getchar, putc и putchar будут использованы только в случае, если соответствующие определения макросов "явно" удалены.
Закладки на сайте Проследить за страницей |
Created 1996-2024 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |