Реферат: Средства ввода-вывода в Си++

Здесь имя_файла - это указатель на строку символов, представляющую собой допустимое имя файла, в которое может входить спецификация файла (включает обозначение логического устройства, путь к файлу и собственно имя файла).

Режим - определяет, каким образом файл будет открыт. Ниже в таблице показаны допустимые значения режимов.

Режим Что обозначает данный режим
r Открыть текстовый файл для чтения
w Создать текстовый файл для записи
a Добавить в конец текстового файла
wb Создать двоичный файл для записи
rb Открыть двоичный файл для чтения
ab Добавить в конец двоичного файла
r+ Открыть текстовый файл для чтения/записи
w+ Создать текстовый файл для чтения/записи
a+ Добавить в конец текстового файла или создать текстовый файл для чтения/записи
r+b Открыть двоичный файл для чтения/записи
w+b Создать двоичный файл для чтения/записи
a+b Добавить в конец двоичного файла или создать двоичный файл для чтения/записи

Приведем фрагмент программы, в котором используется функция fopen() для открытия файла по имени TEST.

FILE *fp;

fp = fopen("test", "w");

Следует сразу же указать на недостаточность такого кода в программе. Хотя приведенный код технически правильный, но его обычно пишут немного по-другому.

FILE *fp;

if ((fp = fopen("test", "w")==NUL)

{

printf("Ошибка при открытии файла.\n\r")"

exit(1);

}

Рис. 1

Этот метод помогает при открытии файла обнаружить любую ошибку.

Например, защиту от записи или полный диск. Причем, обнаружить еще до того, как программа попытается в этот файл что-то записать. Поэтому всегда нужно вначале получить подтверждение, что функция fopen() выполнилась успешно, и лишь затем выполнять c файлом другие операции. Ниже на рисунке 1 приведена небольшую часть программы, которая. подтверждает или не подтверждает открытие файла. Результаты работы указанной программы приведены на рисунке 2.

Рис. 2.


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

На уровне потокового ввода-вывода обмен данными производится побайтно. Такой ввод-вывод возможен как для собственно устройств побайтового обмена (печатающее устройство, дисплей), так и для файлов на диске, хотя устройства внешней памяти, строго говоря, являются устройствами поблочного обмена, т.е. за одно обращение к устройству производится считывание или запись фиксированной порции данных. Чаще всего минимальной порцией данных, участвующей в обмене с внешней памятью, являются блоки в 512 байт или 1024 байта. При вводе с диска (при чтении из файла) данные помещаются в буфер операционной системы, а затем побайтно или определенными порциями передаются программе пользователя. При выводе данных в файл они накапливаются в буфере, а при заполнении буфера записываются в виде единого блока на диск за одно обращение к последнему. Буферы операционной системы реализуются в виде участков основной памяти. Поэтому пересылки между буферами ввода-вывода и выполняемой программой происходят достаточно быстро в отличие от реальных обменов с физическими устройствами.

Функции библиотеки ввода-вывода языка Си, поддерживающие обмен данными с файлами на уровне потока, позволяют обрабатывать данные различных размеров и форматов, обеспечивая при этом буферизованный ввод и вывод. Таким образом, поток - это файл вместе с предоставляемыми средствами буферизации.

При работе с потоком можно производить следующие действия:

· открывать и закрывать потоки (связывать указатели на потоки с конкретными файлами);

· вводить и выводить: символ, строку, форматированные данные, порцию данных произвольной длины;

· анализировать ошибки потокового ввода-вывода и условие достижения конца потока (конца файла);

· управлять буферизацией потока и размером буфера;

· получать и устанавливать указатель (индикатор) текущей позиции

При открытии потока могут возникнуть следующие ошибки: указанный файл, связанный с потоком, не найден (для режима "чтение"); диск заполнен или диск защищен от записи и т.п. Необходимо также отметить, что при выполнении функции fopen() происходит выделение динамической памяти. При её отсутствии устанавливается признак ошибки "Not enough memory" (недостаточно памяти). В перечисленных случаях указатель на поток приобретает значение NULL. Заметим, что указатель на поток в любом режиме, отличном от аварийного никогда не бывает равным NULL.

Приведем типичную последовательность операторов, которая используется при открытии файла, связанного с потоком:

if ((fp = fopen("t.txt","w")) == NULL)

К-во Просмотров: 244
Бесплатно скачать Реферат: Средства ввода-вывода в Си++