stdio.h (от  — стандартный заголовочный файл ввода-вывода) — заголовочный файл стандартной библиотеки языка Си, содержащий определения макросов, константы и объявления функций и типов, используемых для различных операций стандартного ввода и вывода. Функциональность унаследована от «портативного пакета ввода-вывода» («portable I/O package»), написанного Майком Леском из Bell Labs в начале 1970-х. C++ ради совместимости также использует stdio.h наряду со схожим по функциональности заголовочным файлом cstdio.

Функции, объявленные в stdio.h, являются весьма популярными благодаря тому, что, являясь частью Стандартной библиотеки языка Си, они гарантируют работу на любой платформе, поддерживающей Си. Приложения на отдельных платформах могут, тем не менее, иметь причины для использования функций ввода-вывода самой платформы вместо функций stdio.h.

Стандарт определяет такое понятие, как поток — последовательный набор информации, который может быть входным или выходным, может быть предоставлен как ом, так и устройством (например, терминалом). Поток может быть текстовым или бинарным. Текстовый поток — последовательность символов. При этом термин «символ» в данном контексте может означать как читаемый символ, так и управляющий символ (например, символ вертикальной табуляции или символ конца файла). Символы в текстовом потоке объединяются в строки. Каждая строка заканчивается символом новой строки либо символом конца файла. Бинарный поток — последовательность байтов, которые могут прозрачно представлять любую информацию (в том числе и текст). Поток может быть в одном из трёх состояний: неориентированном (по умолчанию), «широко символьном» или битовым. Состояние определяется последней функцией, которая использовала этот поток.

Пример использования Все функции в языке Си (и его многочисленных разновидностях) объявляются в заголовочных файлах. Таким образом, программистам приходится подключать файл stdio.h к исходному коду, чтобы использовать функции, объявленные в нём.

#include <stdio.h>

int main(void) { int ch; while ((ch = getchar()) != EOF) putchar(ch); putchar('\n'); return 0; }

Программа, приведённая выше, считывает всю входящую информацию из стандартного ввода и выводит её побайтно на стандартный вывод, добавляя символ перевода строки в конец вывода.

Функции Функции, объявленные в stdio.h, могут быть разделены на две категории: функции для операций с файлами и функции для операций ввода-вывода.

ИмяПримечанияФункции для файловых операцийfclose закрывает файлfopen, freopen, fdopen открывает файл для чтения и/или записиremove удаляет файл (стирая его)rename переименовывает файлrewind работает аналогично fseek (stream, 0L, SEEK_SET), вызванному для потока, со сбросом индикатора ошибокtmpfile создает и открывает временный файл, удаляемый при закрытии через fclose()Функции для операций ввода-выводаclearerr очищает EOF и индикаторы ошибок для данного потокаfeof проверяет, установлен ли индикатор EOF для данного потокаferror проверяет, установлен ли индикатор ошибок для данного потокаfflush принудительно записывает вывод, предназначенный для помещения в буфер, в файл, ассоциированный с данным потокомfgetpos сохраняет позицию указателя файла потока, ассоциированный с его первым аргументом (FILE *), в его второй аргумент (fpos_t *)fgetc возвращает один символ из файлаfgets получает строку (оканчивающуюся символом перевода строки или конца файла) из потока (например файла или stdin)fputc записывает один символ в потокfputs записывает строку в потокftell возвращает указатель позиции файла, который может быть передан fseekfseek производит смещение от текущей позиции в файле на указанное количество байт, или от его начала или конца, в указанном направлении.fsetpos устанавливает указатель позиции файла потока, ассоциированный с его первым аргументом (FILE *), как хранимый во втором его аргументе (fpos_t *)fread читает данные из файлаfwrite записывает данные в файлgetc считывает и возвращает символ из данного потока и изменяет указатель позиции файла; позволяет использоваться как макрос с теми же эффектами, что и fgetc, кроме того, что может вычислять поток более одного разаgetchar имеет аналогичный эффект, что и getc(stdin)gets считывает символы из stdin до символа перевода строки и хранит их в своём единственном аргументе (очень опасная из-за переполнения буфера)printf, vprintf используются для вывода в стандартный поток выводаfprintf, vfprintf используются для вывода в файлsprintf, snprintf, vsprintf используются для вывода в массив типа char (Строка в языке Си)perror записывает сообщение об ошибке в stderrputc записывает и возвращает символ в поток и изменяет указатель позиции файла на него; можно использовать как макрос с теми же свойствами, что и fputc, кроме того, что он может обрабатывать поток более одного разаputchar, fputchar аналогичны putc(stdout)scanf, vscanf используются для ввода из стандартного потока вводаfscanf, vfscanf используются для ввода из файлаsscanf, vsscanf используются для ввода из массива char (то есть Строка в языке Си)setbuf указывает буфер, который будет использоваться ука­занным потокомsetvbuf устанавливает режим буферизации для данного потокаtmpnam создает имя временного файлаungetc помещает символ обратно в потокputs выводит символьную строку в stdout

Константы В заголовочном файле stdio.h определены следующие константы: Имя ПримечанияEOF отрицательное целое число типа int, используемое для обозначения конца файлаBUFSIZ целое число, равное размеру буфера, используемое функцией setbuf()FILENAME_MAX размер массива char, достаточного для хранения имени любого файла, который может быть открытFOPEN_MAX число файлов, которые могут быть открыты одновременно; как минимум равно 8_IOFBF сокращение от «input/output fully buffered» (полностью буферируемый ввод-вывод); целое число, которое может быть передано функции setvbuf() для запроса блока буфера ввода и вывода для открытого потока_IOLBF сокращение от «input/output line buffered» (линейно буферируемый ввод-вывод); целое число, которое может быть передано функции setvbuf() для запроса линии буфера ввода и вывода для открытого потока_IONBF сокращение от «input/output not buffered» (не буферируемый ввод-вывод); целое число, которое может быть передано функции setvbuf() для запроса небуферированого ввода и вывода для открытого потокаL_tmpnam размер массива char, достаточного для хранения временного имени файла, сгенерированного функцией tmpnam()NULL макрос, расширяющий константу нулевого указателя; то есть константу, представляющую значение указателя, гарантированно указывающего несуществующий адрес объекта в памятиSEEK_CUR целое число, которое может быть передано функции fseek() для запроса позиционирования относительно текущей позиции в файлеSEEK_END целое число, которое может быть передано функции fseek() для запроса позиционирования относительно конца файлаSEEK_SET целое число, которое может быть передано функции fseek() для запроса позиционирования относительно начала файлаTMP_MAX максимальное число уникальных имён файлов, генерируемых функцией tmpnam(); как минимум 25

Переменные Следующие переменные определены в заголовочном файле stdio.h: Имя Примечанияstdin указатель на FILE, указывающий на стандартный поток ввода (обычно клавиатура).stdout указатель на FILE, указывающий на стандартный поток вывода (обычно дисплей терминала).stderr указатель на FILE, указывающий на стандартный поток ошибок (обычно дисплей терминала).

Типы Типы данных, определённые в заголовочном файле stdio.h, содержат: FILE — структура, содержащая информацию о файле или текстовом потоке, необходимую для выполнения её операций ввода и вывода операций, включая: файловый дескриптор текущую позицию в потоке индикатор конца файла индикатор ошибок указатель на буфер потока, если возможно fpos_t — скалярный тип для хранения позиции одного байта в файле. size_t — беззнаковый целый тип, являющийся типом результата выполнения оператора sizeof.

Примечания

Ссылки

stdio.h on Coding Programmer Page / C Library Reference and Examples (en) stdio.h

Категория:Статьи с примерами кода Си