Заголовочный файл 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 | Тип данных для представления количества байтов буфера или строки. |