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