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

Рубанчик В.Б.,

Михайличенко В.Н.

Лабораторная работа "Файловый ввод-вывод"

5/5

Лабораторная работа

Тема: Файловый ввод-вывод

Цель работы: Освоить основные операции с файлами.

Отчет: Тексты программ с необходимыми комментариями.

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

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

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

Имена функций стандартного уровня подобраны так, что обычно отличаются от имен аналогичных функций системного уровня только приставкой f, например, open и fopen, write и fwrite и т.п.

Функции для работы с файлами на стандартном уровне

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

Работа с файлом начинается с процедуры его открытия. В этот момент операционная система формирует в виде таблицы служебную информацию о файле. В дальнейшем по ссылке на эту таблицу операционная система узнает, с каким файлом собирается работать функция ввода-вывода. Чтобы этот механизм заработал, операционная система присваивает таблице вместот механизм заработалымации ввода-вывода, эта ьпозволяет функция файлам0000000000000000000000000000000000000000000000000000000 имени некоторый номер (целое число), который называют дескриптором файла (file descriptor в стандарте Posix или file handle в Windows). Дескриптор, характеризующий файл, является аргументом функций системного уровня.

Однако функции стандартного уровня для обращения к файлу требуют передать им более объемную информацию — указатель на дополнительно сформированную для файла структуру данных типа FILE (определена в заголовочном файле stdio.h.). Одним из полей этой структуры является дескриптор открытого файла. Кроме того, в структуре есть поля, описывающие состояние файла, информацию о буферизации и др. Обо всем этом программисту думать не нужно, так как структура типа FILE строится при выполнении функции, открывающей файл.

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

а) Открытие файла

Открытие файла на стандартном уровне осуществляется функцией fopen.

FILE* fopen(char* filename, char* mode);

filename — это литерал, содержащий имя файла (c полным или относительным, путем обратные слеши в записи путей должны удваиваться);

mode — указатель на литерал, задающий режим открытия файла.

Замечание

Если указать в функции fopen только имя файла, то будет подразумеваться файл из текущей папки. Поэтому, когда программа запускается с помощью exe-файла, то записываемый или читаемый ею файл должен будет находиться в одной с ней папке. При запуске программы из среды ВС текущей папкой будет BC/BIN, откуда запущен файл bc.exe.

Чтобы избежать засорения папки компилятора, в заданиях лабораторной работы нужно прописывать полный путь к файлу.

В процессе своего выполнения функция fopen заполняет структурную переменную типа FILE, и возвращает указатель на нее.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]