STDIO(3S)
НАЗВАНИЕ
stdio - стандартный пакет буферизованного ввода/вывода
СИНТАКСИС
#include <stdio.h>
FILE *stdin, *stdout, *stderr;
ОПИСАНИЕ
Макросы и функции, относящиеся к разделу 3S этого Справочника, предоставляют пользователю эффективные средства буферизованного ввода/вывода. Макросы getc(3S) и
putc(3S) служат для быстрого ввода/вывода символов.
Макросы getchar и putchar и функции более высокого
уровня fgetc, fgets, fprintf, fputc, fputs, fread,
fscanf, fwrite, gets, getw, printf, puts, putw и scanf
ведут себя так, как если бы они использовали getc и
putc. Обращения к макросам и функциям из данного пакета
можно чередовать произвольным образом.
Файл и ассоциированный с ним механизм буферизации называются потоком. Поток описывается как указатель на переменную типа FILE. Функция fopen(3S) создает описатель
потока и возвращает указатель на него. Этот указатель
идентифицирует поток во всех последующих операциях.
Обычно имеются три открытых потока с постоянными указателями, они описаны во включаемом файле <stdio.h> и
связаны со стандартными открытыми файлами:
stdin стандартный ввод
stdout стандартный вывод
stderr стандартный протокол
Константа NULL (0) обозначает пустой указатель.
Целая константа EOF (-1) возвращается по достижении
конца файла или в случае ошибки большинством из целочисленных функций, работающих с потоками (для получения
детальной информации см. описания отдельных функций).
Целая константа BUFSIZ специфицирует размер буферов,
используемых в конкретной реализации.
Любая программа, использующая данный пакет ввода/вывода, должна включать файл соответствующих макроопределений следующим образом:
#include <stdio.h>
Функции и константы, упоминаемые в разделе 3S этого руководства, описаны в файле <stdio.h> и не требуют дальнейшего описания. Константы и следующие "функции" реализованы как макросы (переопределение этих имен опасно): getc, getchar, putc, putchar, ferror, feof,
clearerr и fileno.
Потоки вывода, за исключением стандартного протокола
stderr, по умолчанию буферизуются, если вывод производится в файл, и буферизуется построчно, если вывод производится на терминал. Стандартный протокол stderr по
умолчанию не буферизуется, но использование функции
freopen [см. fopen(3S)] приводит к тому, что стандартный протокол становится буферизованным или буферизованным построчно. Когда поток вывода не буферизован, данные выводятся в нужный файл или на терминал по мере
поступления запросов на запись; когда поток вывода буферизован, байты накапливаются и записываются блоком.
Когда поток вывода буферизован построчно, каждая выводимая строка выводится на терминал после заполнения
строки (то есть как только выводится символ перевода
строки или поступает запрос на ввод с терминала). Функции setbuf или setvbuf [см. setbuf(3S)] могут использоваться для изменения стратегии буферизации потоков.
СМ. ТАКЖЕ
open(2), close(2), lseek(2), pipe(2), read(2),
write(2), ctermid(3S), cuserid(3S), fclose(3S),
ferror(3S), fopen(3S), fread(3S), fseek(3S), getc(3S),
gets(3S), popen(3S), printf(3S), putc(3S), puts(3S),
scanf(3S), setbuf(3S), system(3S), tmpfile(3S),
tmpnam(3S), ungetc(3S).
ДИАГНОСТИКА
Некорректный указатель на поток обычно приводит к тяжелым последствиям, возможно, к терминированию программы.
Описания конкретных функций включают раз яснения возможных ошибочных ситуаций.