Заголовочный файл cstdio
обеспечивает выполнение операций ввода/вывода. Операции ввода/вывода в С++ могут быть выполнены, с использованием Стандартной библиотеки ввода/вывода (cstdio
в С++, и stdio.h
в Cи). Эта библиотека использует так называемые потоки для работы с физическими устройствами, такими как клавиатуры, принтеры, терминалы или с любыми другими типами файлов, поддерживаемых системой. Потоки являются абстракцией, для взаимодействия с устройствами, которая упрощает организацию ввода/вывода. Все потоки имеют аналогичные свойства независимо от индивидуальных особенностей физических носителей. Потоки обрабатываются в заголовочном файле cstdio
как указатели на файловые объекты. Указатель на объект файла однозначно идентифицируется как поток, и используется в качестве параметра в операциях с участием этого потока. В этой библиотеке существуют три стандартных потока:
- стандартный ввод;
- стандартный вывод;
- стандартный поток ошибок.
Все эти потоки автоматически доступны, если подключить библиотеку cstdio
.
Основные свойства потоков
Потоки имеют некоторые свойства, которые определяют, какие функции могут быть использованы для организации ввода/вывода и каким образом будет осуществляться обмен данными через потоки ввода или вывода. Большинство из этих свойств определяются в момент, когда поток, связанный с файлом, открыт с помощью функции fopen
.
- Доступ потока к чтению или записи. Это свойство определяет, имеет ли данный поток доступ к чтению и (или) записи на физических носителях.
- Текст или двоичный код. Потоки, как считается, представляют собой набор текстовых строк, каждая из которых заканчивается символом новой строки. В зависимости от среды, в которой приложение запускается, символы новой строки могут отличаться, поэтому возникает необходимость адаптировать некоторые специальные символы в текстовом файле, согласно спецификациям используемой системы. С другой стороны, двоичный поток - это последовательность символов, записываемая или считываемая из физической среды без всякого преобразования данных.
- Буфер временного хранения данных. Буфер блока памяти, где данные накапливаются, прежде чем физически считываются или записываются на соответствующий файл или устройство. Потоки могут быть либо с полной буферизацией, или без буферизации. Если полная буферизация, то данные чтения/записи физически переносятся или изменяются, когда буфер заполняется. Буфер считается заполненным, если в поток попадает символ новой строки. Небуферизованные потоки символов, также предназначенные для чтения/записи, но буферизация в них выполняется, по возможности, как можно скорее.
Индикаторы потоков ввода/вывода
Потоки имеют определенные внутренние показатели, которые определяют их текущее состояние и которые влияют на поведение некоторых операций ввода:
- Индикатор ошибки. Этот индикатор сигнализирует о том, что произошла ошибка в ходе выполнения операции, связанной с потоком. Этот показатель может быть проверен функцией
ferror
, и может быть сброшен путем вызова функцииclearerr
или любой функцией позиционирования (rewind
,fseek
иfsetpos
). - End-Of-File индикатор. Если данный индикатор сигнализирует о том, что последняя операция чтения или записи с потоком достигла конца файла. Это можно проверить с помощью функции
feof
. Данный индикатор может быть сброшен путем вызова функцииclearerr
или любой функцией позиционирования (rewind
,fseek
иfsetpos
). - Индикатор положения. Это внутренний указатель каждого потока, который указывает на следующий символ, который должен быть считан или записан в следующей операции ввода/вывода. Его значение может быть получено функциями
ftell
иfgetpos
.
Функции заголовочного файла cstdio
Операции с файлами | |
---|---|
remove | Удалить файл. |
rename | Переименовать файл. |
tmpfile | Создать временный файл. |
tmpnam | Сгенерировать имя для файла. |
Доступ к файлам | |
fclose | Отсоединить поток и закрыть файл. |
fflush | Обнуление (сброс) потоков. |
fopen | Открыть файл. |
freopen | Перенаправление потоков ввода/вывода. |
setbuf | Определить строку для буферизации потока. |
setvbuf | Функция изменяет буфер, который будет использоваться для операций ввода/вывода с указанным потоком. |
Форматирование потоков ввода/вывода | |
fprinf | Записывает в указанный поток последовательность символов, предварительно отформатированных. |
fscanf | |
prinf | |
scanf | |
sprinf | |
sscanf | |
vfprinf | |
vprintf | |
vsprinf | |
Символы ввода/вывода | |
fgetc | Возвращает символ на который ссылается внутренний индикатор позиции файла указанного потока. |
fgets | Считывает символы из потока и сохраняет их в виде строки. |
fputc | Записывает символ в поток и перемещает позицию индикатора положения. |
fputs | Записывает строку, указанную в параметре в поток. |
getc | Функция возвращает символ из потока, на который ссылается внутренний индикатор позиции файла. |
getchar | Получить символ из стандартного потока ввода. |
gets | Получить строку из стандартного потока ввода. |
putc |
Помещает символ в поток и перемещает позицию индикатора текущего положения. |
putchar | Вывод текущего символа на стандартный поток вывода (stdout). |
puts | Вывод строки на стандартный поток вывода (на экран). |
ungetc | Возвращает прочитанный символ обратно в поток ввода. |
Чтение/запись потоков | |
fread | Считать блок данных из файла. |
fwrite | Записать в файл блок данных. |
Позиционирование по файлу | |
fgetpos | Получить значение текущего положения в файле. |
fseek | Изменение позиции внутреннего указателя положения в файле, относительно некоторого положения. |
fsetpos | Изменение позиции внутреннего указателя положения в файле. |
ftell | Получить значение указателя текущего положения потока. |
rewind | Установить внутренний указатель положения файла в начало файла. |
Обработка ошибок | |
clearerr | Обнулить внутренние показатели ошибки и конца файла. |
feof | Функция-индикатор конца файла, определяет конец файла. |
ferror | Функция-индикатор ошибок, отлавливает ошибки, связанные с обработкой потоков. |
perror | Интерпретация кода ошибки макроса ERRNO в символьное сообщение. |
Макросы
EOF | Макро-константа для определения конца файла. |
FILENAME_MAX | Максимально допустимая длинна имён файлов. |
NULL | Нулевой указатель. |
TMP_MAX | Минимальное количество временных файлов, которые можно создать. |
А также _IOFBF
, _IOLBF
, _IONBF
, BUFSIZ
, FOPEN_MAX
, L_tmpnam
, SEEK_CUR
, SEEK_END
и SEEK_SET
, каждый описан с соответствующей функцией.
Типы данных
FILE | Этот тип данных определяет поток и содержит информацию, необходимую для управления потоком. |
fpos_t | Тип данных fpos_t хранит информацию для указания позиции в файле. |
size_t | Тип данных для представления количества байтов буфера или строки. |