stdio.h (от англ. standard input/output header — стандартный заголовочный файл ввода-вывода) — заголовочный файл стандартной библиотеки языка Си, содержащий определения макросов, константы и объявления функций и типов, используемых для различных операций стандартного ввода и вывода. Функциональность унаследована от «портативного пакета ввода-вывода» («portable I/O package»), написанного Майком Леском из Bell Labs в начале 1970-х.[1] C++ ради совместимости также использует stdio.h
наряду со схожим по функциональности заголовочным файлом cstdio.
Функции, объявленные в stdio.h
, являются весьма популярными благодаря тому, что, являясь частью Стандартной библиотеки языка Си, они гарантируют работу на любой платформе, поддерживающей Си. Приложения на отдельных платформах могут, тем не менее, иметь причины для использования функций ввода-вывода самой платформы вместо функций stdio.h
.
Стандарт определяет такое понятие, как поток — последовательный набор информации, который может быть входным или выходным, может быть предоставлен как файлом, так и устройством (например, терминалом)[2]. Поток может быть текстовым или бинарным. Текстовый поток — последовательность символов. При этом термин «символ» в данном контексте может означать как читаемый символ, так и управляющий символ (например, символ вертикальной табуляции или символ конца файла). Символы в текстовом потоке объединяются в строки. Каждая строка заканчивается символом новой строки либо символом конца файла. Бинарный поток — последовательность байтов, которые могут прозрачно представлять любую информацию (в том числе и текст). Поток может быть в одном из трёх состояний: неориентированном (по умолчанию), «широко символьном» или битовым. Состояние определяется последней функцией, которая использовала этот поток.
Пример использования
правитьВсе функции в языке Си (и его многочисленных разновидностях) объявляются в заголовочных файлах. Таким образом, программистам приходится подключать файл stdio.h
к исходному коду, чтобы использовать функции, объявленные в нём.
#include <stdio.h>
int main(void)
{
int ch;
while ((ch = getchar()) != EOF)
putchar(ch);
putchar('\n');
return 0;
}
Программа, приведённая выше, считывает всю входящую информацию из стандартного ввода и выводит её побайтно на стандартный вывод, добавляя символ перевода строки в конец вывода.
Функции
правитьФункции, объявленные в stdio.h
, в общем случае могут быть разделены на две категории: функции для операций с файлами и функции для операций ввода-вывода.
Имя | Примечания |
---|---|
Функции для файловых операций | |
fclose |
закрывает файл, ассоциированный с переданным ей значением FILE * |
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 |
возвращает указатель позиции файла, который может быть передан fseek |
fseek |
производит смещение от текущей позиции в файле на указанное количество байт, или от его начала или конца, в указанном направлении. |
fsetpos |
устанавливает указатель позиции файла потока, ассоциированный с его первым аргументом (FILE *), как хранимый во втором его аргументе (fpos_t *) |
fread |
читает данные из файла |
fwrite |
записывает данные в файл |
getc |
считывает и возвращает символ из данного потока и изменяет указатель позиции файла; позволяет использоваться как макрос с теми же эффектами, что и fgetc, кроме того, что может вычислять поток более одного раза |
getchar |
имеет аналогичный эффект, что и getc(stdin) |
gets |
считывает символы из stdin до символа перевода строки и хранит их в своём единственном аргументе (очень опасная из-за переполнения буфера)
|
printf, vprintf |
используются для вывода в стандартный поток вывода |
fprintf, vfprintf |
используются для вывода в файл |
sprintf, snprintf, vsprintf |
используются для вывода в массив типа char (Строка в языке Си)
|
perror |
записывает сообщение об ошибке в stderr
|
putc |
записывает и возвращает символ в поток и изменяет указатель позиции файла на него; можно использовать как макрос с теми же свойствами, что и 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
.
Примечания
править- ↑ Kernighan, Brian[англ.]; Роб Пайк. The UNIX Programming Environment[англ.] (неопр.). — Энглвуд-Клифс[англ.]: Prentice Hall, 1984. — С. pg. 200.
- ↑ ISO/IEC 9899:1999 . Дата обращения: 7 августа 2011. Архивировано 22 августа 2011 года.
Ссылки
правитьstdio.h
— основные определения, The Single UNIX® Specification, выпуск 7 от The Open Group (англ.)- stdio.h on Coding Programmer Page / C Library Reference and Examples (en)
- stdio.h − Стандартный ввод-вывод. (Изложено намного подробнее. Советую почитать.) (en)