STDIO(3S) STDIO(3S) НАЗВАНИЕ stdio - стандартный пакет буферизованного ввода/вывода СИНТАКСИС |#include | |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) создает описатель потока и возвращает указатель на него. Этот указатель идентифицирует поток во всех последующих операциях. Обычно имеются три открытых потока с постоянными указа- телями, они описаны во включаемом файле и связаны со стандартными открытыми файлами: stdin стандартный ввод stdout стандартный вывод stderr стандартный протокол Константа NULL (0) обозначает пустой указатель. Целая константа EOF (-1) возвращается по достижени конца файла или в случае ошибки большинством из цело- численных функций, работающих с потоками (для получения детальной информации см. описания отдельных функций). Целая константа BUFSIZ специфицирует размер буферов, используемых в конкретной реализации. Любая программа, использующая данный пакет ввода/выво- да, должна включать файл соответствующих макроопределе ний следующим образом: |#include Функции и константы, упоминаемые в разделе 3S этого ру ководства, описаны в файле и не требуют даль- нейшего описания. Константы и следующие "функции" реа- лизованы как макросы (переопределение этих имен опас- но): 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). ДИАГНОСТИКА Некорректный указатель на поток обычно приводит к тяже- лым последствиям, возможно, к терминированию программы. Описания конкретных функций включают разъяснения воз можных ошибочных ситуаций.