- •Ю.Е. Алексеев, а.В. Куров
- •Часть 4
- •Алексеев Юрий Евтихович Куров Андрей Владимирович
- •8. Символьный тип данных
- •8.1 Общие сведения и библиотечные функции
- •8.2 Примеры программ обработки символьных данных
- •8.3 Задания на обработку символьных матриц
- •9. Строки
- •9.1 Общие сведения и библиотечные функции
- •9.2 Примеры программ обработки строк (массивова символов)
- •9.3 Задания на обработку строк
- •10. Типы данных структура и объединение
- •10.1 Общие сведения о структурах
- •10.2 Примеры программ обработки структур
- •10.3 Задания на обработку структур
- •10.4 Объединения
- •10.5 Примеры программ обработки объединений
- •11. Файлы
- •11.1 Основные сведения о файлах
- •11.2 Библиотечные функции для работы с файлами
- •11.3 Примеры программ обработки текстовых файлов
- •11.4 Задания на обработку текстовых файлов.
- •11.5 Примеры программ обработки бинарных файлов
- •11.6 Задания на бинарные файлы.
- •12. Тип данных указатель
- •12.1 Общие сведения Объявления и присваивания
- •Операции с указателями
- •Приоритеты операций при работе с указателями.
- •Взаимосвязь массивов и указателей
- •12.2 Динамические переменные и массивы Динамические переменные
- •Динамические массивы
- •Двумерные динамические массивы
- •Доступ к элементам динамической матрицы
- •Библиотечные функции с для работы с динамическими переменными и массивами
- •Передача в функции динамических массивов
- •13 Динамические структуры данных
- •13.1 Списки Линейный список
- •Пример программы работы с однонаправленным списком
- •Пример программы работы с двунаправленным списком
- •13.2 Задания на обработку списков.
- •13.3 Деревья бинарные
- •Структура бинарного дерева
- •Примеры работ с бинарным деревом
- •Список литературы
- •Алфавитный указатель
- •Вопросы для самопроверки Символы
- •Структуры
- •Указатели
11. Файлы
11.1 Основные сведения о файлах
Файл обычно определяют как поименованный набор данных, хранимых на внешнем носителе. Язык C рассматривает любой файл как последовательный набор байтов, в котором текущий байт при вводе-выводе отмечен положением файлового курсора. В начале работы с файлом этот курсор указывает на самый первый, нулевой байт, а по мере последовательного ввода (или вывода) смещается к байту, номер которого больше текущего на количество прочитанных (или записанных) байтов. Для ускорения обмени данными с внешними запоминающими устройствами каждому открытому файлу выделяется в оперативной памяти буфер для ввода и/или вывода. При вводе данных в буфер единовременно заполняется требуемой порцией байтов из файла (при последовательном доступе это позволит значительно реже обращаться к внешнему устройству, что особенно важно для дисковых устройств), а при выводе также уменьшается количество обращений к внешнему устройству, так как обычно вывод выполняется только после заполнения буфера. При открытии файла ему ставится в соответствие поток. В начале выполнения программы автоматически открываются три файла и связанные с ними потоки – стандартный ввод, стандартный вывод и стандартная ошибка. Потоки обеспечивают каналы передачи данных между файлом и программой. Стандартный поток ввода позволяет программе считывать данные с клавиатуры, а стандартные потоки вывода и ошибок позволяет выводить данные на экран. Для начала работ с прочими файлами необходимо явно выполнять открытие, а при завершении работ с файлом - его закрытие.
Функция, открывающая файл, возвращает указатель типа FILE (определяется в заголовочном файле <stdio.h>). Этот указатель следует присвоить переменной соответствующего типа (называемой файловой переменной или указателем файла), которая и будет представлять в дальнейшем файл во всех библиотечных функциях работы с ним, в том числе и в функции закрытия файла.
В языке C различают файлы двух типов – текстовые и бинарные.
Текстовые файлы представляют собой последовательность строк файла (последовательностей символов, заканчивающихся символом конца строки файла, имеющим код 10). Длины строк файла могут различаться, в том числе иметь и нулевую длину, то есть состоять только из одного символа конца строки файла. При выводе числовых данных в текстовый файл производится их преобразование из внутреннего представления в оперативной памяти к символьному, принятому для восприятия человеком, а при вводе числовых данных в файл выполняется обратное преобразование (из символьной формы во внутреннее представление). Текстовые файлы предназначены не только для хранения данных на внешних запоминающих устройствах, но и для просмотра в текстовых редакторах.
Бинарные файлы представляют собой последовательность элементов определенного типа и, следовательно, определенного размера, причем компоненты такого файла хранятся в двоичном коде, т.е. выводятся из оперативной памяти в файл без преобразования к символьному виду. Поэтому для бинарных файлов ввод и вывод данных выполняется быстрее, чем для текстовых файлов.
Следует заметить, что работа с текстовыми файлами возможно только в режиме последовательного доступа, т.е. чтобы получить доступ к очередной строке файла или её части, надо считать всё, что им предшествует.
С бинарными файлами можно работать как в режиме последовательного, так и в режиме прямого доступа, т.е. получать доступ к требуемому элементу файла без просмотра всех предшествующих.
