- •Лабораторная работа 11
- •Постановка задачи
- •Варианты заданий
- •Методические указания по выполнению лабораторной работы
- •Справочные материалы
- •Понятие потока
- •Текстовый поток
- •Двоичный поток
- •Файлы в языке си
- •Указатель файла
- •Функция fopen
- •Функция fclose
- •Построчный ввод – вывод
- •Блоковый ввод – вывод
- •Примеры решенных задач
- •Пример 1. Табулирование функции с записью результатов на диск
- •Постановка эадачи
- •Решение
- •Пример 2. Запись содержимого двух массивов в текстовый файл
- •Постановка задачи
- •Решение
- •Пример 3. Чтение из таблицы, хранящейся в файле, двух числовых массивов
- •Постановка задачи
- •Решение
- •Пример 4. Вывод содержимого текстового файла на экран дисплея с проверкой на наличие ошибок.
- •Пример 5. Числовая матрица находится в текстовом файле. Первая строка файла содержит данные о размере матрицы. Вычислить сумму элементов в каждой строке матрицы.
- •Пример 6. Сумма чисел в текстовом файле
- •Пример 7.
- •Контрольные вопросы и задачи для самостоятельной работы
Справочные материалы
При работе с внешними устройствами при программировании на языке Си следует использовать библиотечные функции. Библиотечные функции языка Си, предназначенные для работы с внешними устройствами можно разделить на две категории:
низкоуровневые функции,
потоковые функции.
Низкоуровневые библиотечные функции учитывают особенности той среды, в которой выполняется программа. Это позволяет повысить их эффективность по сравнению с потоковыми функциями. Недостатком таких функций является ухудшение переносимости программ. Такие функции не поддерживаются стандартом языка Си.
Потоковые функции нашли более широкое применение по сравнению с низкоуровневыми функциями. Этому способствовало то обстоятельство, что эти функции в стандарт языка Си. Они включены в стандартную библиотеку, которая является составной частью стандарта языка Си. В литературе рекомендуется использовать преимущественно те функции, которые входят в стандартную библиотеку языка Си. Ограничимся рассмотрением только потоковых библиотечных функций.
Приведем описание стандартных подпрограмм, которые следует использовать при работе с файлами. Остановимся на некоторых понятиях, существенных для работы с потоковыми библиотечными функциями.
Понятие потока
Поток – это своего рода обобщенное устройство ввода – вывода. Это понятие введено с целью обеспечить независимость программирования операций ввода – вывода от следующих факторов:
конкретного типа внешнего устройства,
среды, в которой выполняется программа.
Все потоки ведут себя похожим образом. Их работа не учитывает особенности физического устройства. В этой связи функция, выполняющая чтение из дискового файла, может использоваться и для ввода с консоли. Потоки бывают двух категорий:
текстовые,
двоичные.
Текстовый поток
Текстовый поток – это последовательность символов, организованная в строки. Каждая строка должна заканчиваться символом новой строки: ‘\n’. Однако в конце последней строки этот символ не является обязательным. В зависимости от среды, в которой происходит выполнение программы, при использовании текстового потока может иметь место преобразование символов. Например, при записи в среде DOS или Windows символ ‘\n’ преобразуется в последовательность символов CRLF.
Таким образом, при использовании текстового потока может и не иметь место однозначное соответствие между символами, которые записываются (читаются) и теми символами, которые хранятся на внешнем устройстве.
Кроме того, при использовании текстового потока для чтения особым образом обрабатывается символ конца файла. В таблице кодов ASCII этот символ имеет код 0x1A.
Двоичный поток
Двоичный поток – это последовательность байтов, которая взаимно однозначно соответствует байтам на внешнем устройстве, причем никаких преобразований символов не происходит; отсутствуют символы, которые играют особую роль. Все символы обрабатываются одинаково. Количество символов, которые записываются (читаются) совпадает с количеством символов, хранящихся на внешнем устройстве.
Файлы в языке си
В языке Си файлом называется любое внешнее устройство, начиная от дискового файла и кончая терминалами и принтерами. Поток связывается с определенным файлом при выполнении операции открытия. Как только файл будет открыт, можно выполнять обмен данными между ним и программой.
Файл отключается от определенного потока при выполнении операции закрытия. При закрытии файла, открытого для записи, содержимое (если оно имеется) связанного с ним потока записывается на внешнее устройство. Этот процесс, называемый дозаписью потока гарантирует, что все данные будут записаны на внешнее устройство.