STDIO(3)

НАЗВАНИЕ
stdio - стандартные библиотечные функции ввода/вывода (I/O)

СИНТАКСИС
#include <stdio.h>

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

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

Поток соотносится с внешним файлом (который также может быть физическим устройством) при открытии файла. Такое открытие может вызвать создание нового файла. Создание существующего файла вызовет потерю его содержимого. Если файл не может поддерживать запросы позиционирования, то индикатор позиции в файле (нулевой байт), соответствующий потоку, устанавливается в начале файла (если только файл открыт не в режиме добавления). Если используется режим добавления, то индикатор позиции в файле будет указывать на конец файла. Индикатор позиции обрабатывается последующими считывающими, записывающими и позиционными запросами. Все операции ввода осуществляются так, как если бы все символы были безошибочно считаны вызовом функции 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 будут использованы только в случае, если соответствующие определения макросов "явно" удалены.

СПИСОК ФУНКЦИЙ

Функция
    Описание

clearerr
    проверяет и обнуляет статус потока;

fclose
    закрывает поток;

fdopen
    открывает поток;

feof
    проверяет и обнуляет статус потока;

ferror
    проверяет и обнуляет статус потока;

fflush
    "сбрасывает" поток;

fgetc
    считывает следующий символ или слово из потока ввода;

fgetpos
    считывает позицию в потоке;

fgets
    считывает строку из потока;

fileno
    проверяет и обнуляет статус потока;

fopen
    открывает поток;

fprintf
    форматирует вывод;

fpurge
    "сбрасывает" поток;

fputc
    выводит символ и слово в поток;

fputs
    выводит строку в поток;

fread
    считывает двоичные данные потока ввода/вывода;

freopen
    функции открытия потока;

fropen
    открывает поток;

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 соответствует ANSI X3.159-1989 (``ANSI C'').

СМ. ТАКЖЕ
open(2), close(2), read(2), write(2), stdout(3)