Главная страница Случайная страница Разделы сайта АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Процедурные средства ввода-вывода.
Программа по обработке информации, использующая внешние файлы всегда использует средства операционной системы в среде, в которой она функционирует. Для использования данных, находящихся в др.файле его необходимо открыть. В момент открытия файла ОС выделяет спец.области памяти – системный буфер – участок ОЗУ, который исп-ся для обмена данными между программой и открытым файлом. Одновременно в одной работающей программе может быть открыто неск.файлов. Каждому открытому файлу система присваивает номер – дескриптор, по к-ому происходит различение файлов. По завершении работы с данными его необходимо закрыть. При закрытии файла регистрируется его имя в каталоге, дата, время создания, очищает системные буфера, если не закрыть файл, то данные потеряются. При нормальном завершении работы программы все открытые файлы автоматически закрываются. Во время работы с файлом с ним связывается указатель текущей позиции. Все операции считывания и записи данных из файла вып-ся с указателя, причем во время считывания УК-ль текущей позиции перемещается на величину считываемой либо записанной информации. Конец файла обозначается спец.именем EOF. Во всех ЯП существует ф-ия для управления положением указателя текущей позиции. Средства языка Си для работы с внешними файлами представляют собой набор библиотечных ф-ий. Их прототипы нах-ся в stdio.h. 1) ф-ии верхнего уровня(потоковые) 2) ф-ии нижнего уровня(дескрипторные) 3) консольного ввода-вывода. Режимы открытия файла: текстовый, двоичный. В текстовом режиме происходит трансформация: ‘\n’ CR #10(возврат каретки); LF #13(перевод строки). В двоичном режиме трансформации не происходит. Открытие файла средствами языка СИ: В момент открытия файла в программе образуется специальная структура, которая построена след.образом: struct FILE {< информация об открытом файле> }; FILE *fp; - имя файловой переменной, указатель на открытый поток. Для открытия файла есть спец. ф-ия, возвращаемое значение которой FILE*: FILE *fopen(const char *filename, const char*mode); //открывает файл с именем filename в режиме открытия mode, возвращает указатель на открытый поток. Но процедура открытия не всегда может завершиться успешно, тогда ф-ия возвращает NULL, поэтому обязательна след.схема открытия: FILE *f; If((f=fopen(“data.dat”, “r”))==NULL) { perror(“error data.dat”); exit(1); } Ф-ия закрытия файла: int fclose(FILE *stream); //закрывает поток с именем stream. Если не удалось успешно закрыть, то возвращаемое значение EOF. Пример: fclose(fp); int fcloseall(); //закрыть все открытые потоки, кроме стандартных. Режимы открытия файла: r(открыть только для чтения), w(открыть только для записи), a(открыть файл для добавления данных в его конец), r+(открыть файл для обновления, доступен для чтения и для записи), w+(открывается файл для чтения и записи), а+(открыть для обновления, а также для чтения и записи), b(открыть файл в двоичном режиме), t(открыть файл в текстовом режиме).
Поток – файл вместе с предоставленными ему средствами буферизации. Стандартные потоки ввода-вывода: 1)stdin – станд.поток ввода 2)stdout – станд.поток вывода 3)stderr – станд.поток вывода сообщений об ошибках 4)stdaux – станд.доп.поток 5)stdprn – станд.поток вывода (связан с принтером) Библиотечные функции для работы с содержимым файлов делятся на: 1)посимвольного в/в 2)построчного в/в 3)форматированного в/в 4)поблочного в/в
|