Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ввод-вывод.doc
Скачиваний:
8
Добавлен:
18.04.2015
Размер:
273.92 Кб
Скачать

Работа с файлами

Информация во внешней памяти сохраняется в виде файлов – именованных участков внешней памяти (жесткого диска, гибкой дискеты, электронного виртуального диска). Файлы позволяют сохранять информацию при отключении компьютера (в отличие от ОП). Под файлом понимают также логическое устройство – потенциальный источник или приемник информации.

В файлы можно как помещать данные, так и извлекать их из файлов. Такие действия имеют общее название ввод-вывод.

Функции С++ позволяют читать данные из файлов в ОП, получать их с устройств (напр. с клавиатуры), и записывать данные из ОП в файл или выводить их на различные устройства, напр. на экран или на принтер.

Средства ввода-вывода языка С++ можно разделить на три группы:

  1. ввод-вывод верхнего уровня – потоковый

а) библиотека функций Си - интерфейс в файле stdio.h

б) библиотека классов С++ -интерфейс в файле fstream.h

  1. ввод-вывод нижнего уровня (системный ввод- вывод)-файл io.h

  2. ввод-вывод для консоли и портов – интерфейс в файле conio.h

Библиотека ввода-вывода С++ включает средства для работы с последовательными файлами, представляющими собой именованную последовательность байтов, имеющую начало и конец. Чтение из файла или запись в файл ведутся байт за байтом, позиции в файле, откуда производится чтение, или куда ведется запись, определяются указателем позиции файла. Указатель позиции записи или чтения устанавливается либо автоматически, либо с помощью функций управления положением его можно установить на нужный байт.

Ввод-вывод нижнего уровня

Функции ввода – вывода низкого уровня позволяют пользоваться средствами ввода-вывода операционной системы непосредственно.

При этом не выполняется буферизация и форматирование данных при обмене.

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

Дескриптор файла характеризует его размещение во внутренних файловых таблицах операционной системы.

Основные функции нижнего уровня:

  1. open( ) / close( ) – открыть / закрыть файл

  2. creat( ) – создать файл

  3. read ( )/ write( ) – читать / писать данные

  4. eof ( ) – проверить достижение конца файла

  5. lseek( ) – изменить текущую позицию в файле

  6. tell ( ) – получить значение текущей позиции в файле

Текстовой и бинарный файлы

Текстовой файл представляет собой последовательность символьных строк переменной длины, разделенных комбинацией символов “перевод каретки” (символ с кодом 13) и символ “перевод строки” (символ с кодом 10).

Работа с текстовым файлом организуется построчно. По определению текстовой файл содержит символьную информацию. При записи данных из оперативной памяти в файл, значения числовых типов будут преобразовываться из внутренних кодов хранения данных в оперативной памяти в символьное представление и в таком виде записываться в строку файла.

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

Кроме того в текстовом режиме при чтении из файла два символа CR ( 0x0D-конец строки – код 13) и LF (0x0A- переход к началу строки – код 10) преобразуются в один символ новой строки ‘\n’.

При записи в текстовой файл символ новой строки преобразуется в два символа CR и LF.

Бинарный файл предназначен для двоичного режима обмена данными, когда преобразование символов не происходит, и их значения не анализируются. Бинарный файл – это линейная последовательность байтов, соответствующая внутреннему представлению данных без разделения на строки

Создание файла

( на нижнем уровне)

Функция по заданному имени (path) создает новый файл или очищает и подготавливает к работе уже существующий файл.

int creat (const char *path , int mode); // прототип в файле < io.h >

Параметр mode определен в файле <sys\stat.h>

равен: S_IWRITE - для записи

S_IREAD - для чтения

S _IREAD | S_IWRITE - для записи и чтения

Файл создается для работы в режиме обмена либо текстовом (по умолчанию) либо бинарном.

Таким образом файл может создаваться для текстового режима обмена данными или для двоичного. Для установления режима обмена при создании файла надо глобальной системной переменной _fmode , определенной в файлах fcntl.h и stdlib.h надо задать соответствующее значение:

#include < fcntl.h>

_fmode = O_BINARY // по умолчанию O_TEXT

Функция creat() возвращает индивидуальный логический номер файла , идентификатор файла, дескриптор файла при создании файла и –1 при неуспешном завершении.

Пример использования функции:

# include <iostream.h>

#include <io.h>

#include<sys\stat.h>

… int fd ;

fd = creat (“ examp.cpp”, S_WRITE);

if( fd = = -1) cout<<”Ошибка”…

По умолчанию создастся текстовой файл.