STDIO(3)

ИМЯ
stdio - библиотека функций стандартного ввода-вывода

ОБЗОР
#include <stdio.h>

FILE *stdin;
FILE *stdout;
FILE *stderr;

ОПИСАНИЕ
Библиотеки стандартного ввода-вывода предоставляют простой и эффективный интерфейс буферизируемого потока ввода-вывода. Ввод и вывод представляется логическим потоком данных, а физические характеристики ввода-вывода скрываются. Далее приводится список функций и макросов; более подробная информация находится в соответствующих страницах.

Поток соотносится с внешним файлом (который также может быть физическим устройством) при открытии файла. Такое открытие может вызвать создание нового файла. Создание существующего файла вызовет потерю его содержимого. Если для файла поддерживаются запросы позиционирования (например для файла на диске, а не терминал), то индикатор позиции в файле, соответствующий потоку, устанавливается в начало файла (нулевой байт), если только файл не открыт в режиме добавления. Если используется режим добавления, то не определено, будет ли индикатор позиции в файле будет указывать на конец файла. Индикатор позиции изменяется при последующих запросах чтения, записи и изменения индикатора. Все операции ввода осуществляются так, как если бы все символы последовательно считывались вызовом функции fgetc(3); а вывод осуществляется, как если бы все символы последовательно записывались вызовом функции fputc(3).

Соотношение потока с файлом прекращается при закрытии файла. Перед прекращением потоки вывода очищаются (flushed) (содержимое незаписанного буфера передаётся в системное окружение). Значение указателя на объект 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, SEEK_CUR, TMP_MAX, clearerr, feof, ferror, fileno, getc, getchar, putc, putchar, stderr, stdin, stdout. Для feof, ferror, clearerr, fileno, getc, getchar, putc, и putchar существуют версии в виде функций, которые используются если определения макросов были удалены явно.

  Список функций
Функция | Описание
clearerr | проверяет и сбрасывает состояние потока
fclose | закрывает поток
fdopen | функции открытия потока
feof | проверяет и сбрасывает состояние потока
ferror | проверяет и сбрасывает состояние потока
fflush | сбрасывает данные потока
fgetc | считывает следующий символ или слово из потока ввода
fgetpos | считывает позицию в потоке
fgets | считывает строку из потока
fileno | возвращает целочисленный дескриптор аргумента потока
fopen | функции открытия потока
fprintf | вывод по формату
fpurge | сбрасывает данные потока
fputc | выводит символ и слово в поток
fputs | выводит строку в поток
fread | считывает двоичные данные из потока ввода-вывода
freopen | функции открытия потока
fscanf | форматирует ввод
fseek | устанавливает позицию в потоке
fsetpos | устанавливает позицию в потоке
ftell | устанавливает позицию в потоке
fwrite | записывает двоичные данные потока ввода-вывода
getc | считывает следующий символ или слово из потока ввода
getchar | считывает следующий символ или слово из потока ввода
gets | считывает строку из потока
getw | считывает следующий символ или слово из потока ввода
mktemp | создаёт имя временного файла (уникальное)
perror | системные сообщения об ошибках
printf | вывод по формату
putc | выводит символ или слово в поток
putchar | выводит символ и слово в поток
puts | выводит строку в поток
putw | выводит символ и слово в поток
remove | удаляет запись из каталога
rewind | устанавливает позицию в потоке
scanf | форматирует ввод
setbuf | операции буферизации потока
setbuffer | операции буферизации потока
setlinebuf | операции буферизации потока
setvbuf | операции буферизации потока
sprintf | вывод по формату
sscanf | форматирует ввод
strerror | системные сообщения об ошибках
sys_errlist | системные сообщения об ошибках
sys_nerr | системные сообщения об ошибках
tempnam | процедуры с временными файлами
tmpfile | процедуры с временными файлами
tmpnam | процедуры с временными файлами
ungetc | возвращает символ в поток ввода
vfprintf | вывод по формату
vfscanf | форматирует ввод
vprintf | вывод по формату
vscanf | форматирует ввод
vsprintf | вывод по формату
vsscanf | форматирует ввод

СООТВЕТСТВИЕ СТАНДАРТАМ
Библиотека stdio соответствует C89.

СМОТРИТЕ ТАКЖЕ
close(2), open(2), read(2), write(2), stdout(3), unlocked_stdio(3)