Потоковый ввод-вывод

Эти функции обрабатывают данные различных размеров и форматов, — от одного символа до больших структур данных. Они также предоставляют возможность буферизации, которая может повысить производительность. Размер буфера потока по умолчанию составляет 4 КБ. Эти подпрограммы влияют только на буферы, созданные подпрограммами библиотеки времени выполнения, и не затрагивают буферы, созданные операционной системой.

Подпрограммы потокового ввода-вывода

Маршрут Использование
clearerr, clearerr_s Очистка индикатора ошибки для потока
fclose Закрытие потока
_fcloseall Закрытие всех открытых потоков, кроме stdin, stdoutи stderr
_fdopen, wfdopen Связывание потока с дескриптором открытого файла
feof Проверка файла или потока на предмет конца
ferror Проверка на наличие ошибки в потоке
fflush Сброс потока в буфер или на запоминающее устройство
fgetc, fgetwc Считывание символа из потока (функциональные версии getc и getwc)
_fgetchar, _fgetwchar Считать символ из stdin (функциональные версии getchar и getwchar)
fgetpos Получение индикатора позиции потока
fgets, fgetws Считывание строки из потока
_fileno Получение дескриптора файла, связанного с потоком
_flushall Сброс всех потоков в буфер или запоминающее устройство
fopen, _wfopen, fopen_s, _wfopen_s Открытие потока
fprintf, _fprintf_l, fwprintf, _fwprintf_l, fprintf_s, _fprintf_s_l, fwprintf_s, _fwprintf_s_l Запись форматированных данных в поток
fputc, fputwc Запись символа в поток (функциональные версии putc и putwc)
_fputchar, _fputwchar Запись символа в stdout (функциональные версии putchar и putwchar)
fputs, fputws Запись строки в поток
fread Считывание неформатированных данных из потока
freopen, _wfreopen, freopen_s, _wfreopen_s Переназначение потокового указателя FILE , чтобы он указывал на новый файл или устройство
fscanf, fwscanf, fscanf_s, _fscanf_s_l, fwscanf_s, _fwscanf_s_l Считывание форматированных данных из потока
fseek, _fseeki64 Перемещение позиции в файле в заданное место
fsetpos Задание индикатора позиции в потоке
_fsopen, _wfsopen Открытие потока с совместным доступом к файлу
ftell, _ftelli64 Получение текущей позиции в файле
fwrite Запись неформатированных элементов данных в поток
getc, getwc Считывание символа из потока (версии-макросы fgetc и fgetwc)
getchar, getwchar Считывание символа из stdin (версии-макросы fgetchar и fgetwchar)
_getmaxstdio Возвращает количество одновременно открытых файлов, допустимое на уровне потокового ввода-вывода.
gets_s, _getws_s Считывание строки из stdin
_getw Считывание двоичного числа int из потока
printf, _printf_l, wprintf, _wprintf_l,printf_s, _printf_s_l, wprintf_s, _wprintf_s_l Запись форматированных данных в stdout
putc, putwc Запись символа в поток (версии-макросы fputc и fputwc)
putchar, putwchar Запись символа в stdout (версии-макросы fputchar и fputwchar)
puts, _putws Запись строки в поток
_putw Запись двоичного числа int в поток
rewind Перемещение позиции в файле в начало потока
_rmtmp Удаление временных файлов, созданных tmpfile
scanf, _scanf_l, wscanf, _wscanf_l,scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l Считывание форматированных данных из stdin
setbuf Управление потоковой буферизацией
_setmaxstdio Задание максимального числа одновременно открытых файлов на уровне потокового ввода-вывода
setvbuf Управление потоковой буферизацией и размером буфера
_snprintf, _snwprintf, _snprintf_s, _snprintf_s_l, _snwprintf_s, _snwprintf_s_l Запись форматированных данных указанной длины в строку
_snscanf, _snwscanf, _snscanf_s, _snscanf_s_l, _snwscanf_s, _snwscanf_s_l Считывают форматированные данные указанной длины из стандартного входного потока.
sprintf, swprintf, sprintf_s, _sprintf_s_l, swprintf_s, _swprintf_s_l Запись форматированных данных в строку
sscanf, , swscanfsscanf_s_sscanf_s_l, swscanf_s_swscanf_s_l Считывание форматированных данных из строки
_tempnam, _wtempnam Создание временного имени файла в заданном каталоге
tmpfile, tmpfile_s Создание временного файла
tmpnam, _wtmpnam, tmpnam_s, _wtmpnam_s Создание временного имени файла
ungetc, ungetwc Отправка символа обратно в поток
_vcprintf, _vcwprintf, _vcprintf_s, _vcprintf_s_l, _vcwprintf_s, _vcwprintf_s_l Вывод форматированных данных на консоль
vfprintf, vfwprintf, vfprintf_s, _vfprintf_s_l, vfwprintf_s, _vfwprintf_s_l Запись форматированных данных в поток
vprintf, vwprintf, vprintf_s, _vprintf_s_l, vwprintf_s, _vwprintf_s_l Запись форматированных данных в stdout
_vsnprintf, _vsnwprintf, vsnprintf_s, _vsnprintf_s, _vsnprintf_s_l, _vsnwprintf_s, _vsnwprintf_s_l Запись форматированных данных указанной длины в буфер
vsprintf, vswprintf, vsprintf_s, _vsprintf_s_l, vswprintf_s, _vswprintf_s_l Запись форматированных данных в буфер

Когда программа начинает выполнение, код запуска автоматически открывает несколько потоков: стандартный ввода (на который указывает stdin), стандартный вывода (на который указывает stdout) и стандартный вывода ошибок (на который указывает stderr). Эти потоки по умолчанию направляются на консоль (клавиатуру и экран). С помощью freopen можно перенаправить stdin, stdoutили stderr на файл на диске или на устройство.

Файлы, открытые с помощью потоковых подпрограмм, по умолчанию буферизуются. stderr Функции stdout удаляются всякий раз, когда они заполнены или, если вы записываете на символьное устройство после каждого вызова библиотеки. Если программа завершается аварийно, буферы вывода могут не быть сброшены, что приводит к потере данных. Используйте fflush или _flushall убедитесь, что буфер, связанный с указанным файлом, удаляется в операционную систему или все открытые буферы удаляются. Операционная система может кэшировать данные перед записью на диск. Функция фиксации на диск гарантирует, что содержимое буфера с очисткой не будет потеряно, если произошел сбой системы.

Существует два способа сохранить зафиксировать содержимое буфера на диске:

  • Скомпоновать код с файлом COMMODE.OBJ, чтобы установить глобальный флаг фиксации. По умолчанию этот глобальный флаг имеет значение n, т. е. "не фиксировать".

  • Установите флаг режима в c с помощью fopen или _fdopen.

Любой файл, открытый с флагом c или n , ведет себя в соответствии со значением флага, вне зависимости от состояния глобального флага фиксации.

Если программа не закрывает поток явным образом, поток автоматически закрывается при завершении программы. Следует, однако, закрывать поток, когда программа завершает работу с ним, так как количество потоков, которые могут одновременно быть открыты, ограничено. Дополнительные сведения об этом ограничении см _setmaxstdio . в этой статье.

Ввод может следовать сразу за выводом только с промежуточным вызовом fflush или функции позиционирования в файле (fseek, fsetposили rewind). За входными данными можно следовать без промежуточного вызова функции размещения файлов, если входная операция встречает конец файла.

См. также

Входные и выходные данные
Универсальные подпрограммы среды выполнения C по категориям