ПРОГРАММИРОВАНИЕ/ ЯЗЫКИ ПРОГРАММИРОВАНИЯ Лекция 4 Работа с бинарными файлами (весенний семестр 2012 г.) Доцент Кафедры вычислительных систем, к.т.н. Поляков.

Презентация:



Advertisements
Похожие презентации
ПРОГРАММИРОВАНИЕ/ ЯЗЫКИ ПРОГРАММИРОВАНИЯ Лекция 3 Работа с файлами (весенний семестр 2012 г.) Доцент Кафедры вычислительных систем, к.т.н. Поляков Артем.
Advertisements

ПРОГРАММИРОВАНИЕ/ ЯЗЫКИ ПРОГРАММИРОВАНИЯ Лекция 1 Процедурный подход к разработке программ (весенний семестр 2012 г.) Доцент Кафедры вычислительных систем,
ПРОГРАММИРОВАНИЕ/ ЯЗЫКИ ПРОГРАММИРОВАНИЯ Лекция 2 Время жизни и области видимости программных объектов (весенний семестр 2012 г.) Доцент Кафедры вычислительных.
Время жизни и области видимости программных объектов Преподаватель: Доцент Кафедры ВС, к.т.н. Поляков Артем Юрьевич © Кафедра вычислительных систем ФГОБУ.
Файловый ввод-вывод Преподаватель: Доцент Кафедры ВС, к.т.н. Поляков Артем Юрьевич © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» ФГОБУ ВПО "СибГУТИ"
ПРОГРАММИРОВАНИЕ/ ЯЗЫКИ ПРОГРАММИРОВАНИЯ Лекция 5 Структуры данных (весенний семестр 2012 г.) Доцент Кафедры вычислительных систем, к.т.н. Поляков Артем.
Лекция 14 Динамические данные. Виды памяти Существует три вида памяти: статическая, стековая и динамическая. Статическая память выделяется еще до начала.
Информационные технологии Классы памяти auto static extern register Автоматические переменные создаются при входе в функцию и уничтожаются при.
ФГОБУ ВПО "СибГУТИ" Кафедра вычислительных систем УКАЗАТЕЛИ Преподаватель: Доцент Кафедры ВС, к.т.н. Поляков Артем Юрьевич © Кафедра вычислительных систем.
Сложные типы данных Преподаватель: Доцент Кафедры ВС, к.т.н. Поляков Артем Юрьевич © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» ФГОБУ ВПО "СибГУТИ"
Лабораторная работа 7. Работа с динамической памятью, строками и файлами.
Работа с файлами FILE НГТУ ИРИТ кафедра ИСУ Ольга Пронина.
Процедурный подход к программированию Преподаватель: Доцент Кафедры ВС, к.т.н. Поляков Артем Юрьевич © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
Основы информатики Лекция. Массивы. Указатели. Заикин Олег Сергеевич
Лабораторная работа 4. Подпрограммы. Задание на лабораторную работу Написать программу, реализующую хранение информации, указанной в вариантах индивидуальных.
Указатели Динамические структуры данных. 2 Статические данные переменная (массив) имеет имя, по которому к ней можно обращаться размер заранее известен.
Основы информатики Массивы. Указатели. Заикин Олег Сергеевич
Кафедра ЮНЕСКО по НИТ1 Производные типы данных Параллельное программирование.
Символы и строки 1. Содержание 8.1Введение 8.2Основы Строк и Символов 8.3Библиотека работы со строками 8.4Преобразование строк 8.5Стандартная библиотека.
1 Переопределение операций Макаревич Л. Г.. 2 Зачем нужна перегрузка операций? class Complex { double re; double im; public: Complex(double r=0, double.
Транксрипт:

ПРОГРАММИРОВАНИЕ/ ЯЗЫКИ ПРОГРАММИРОВАНИЯ Лекция 4 Работа с бинарными файлами (весенний семестр 2012 г.) Доцент Кафедры вычислительных систем, к.т.н. Поляков Артем Юрьевич © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ»

Бинарные файлы 2 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Бинарные файлы (binary file) содержат символы, не отображаемые текстовыми редакторами. Файлы, которые состоят только из символов, допустимых в текстовых редакторах, называются текстовыми (plain text). Бинарные файлы позволяют хранить объекты программы (переменные, массивы, структуры) в том формате, в котором они хранятся в оперативной памяти. Хранение данных в формате оперативной памяти имеет следующие преимущества: 1. Компактное размещение (меньший объем памяти). 2. Жестко определенный размер объекта в файле. Недостатком является невозможность чтения данных с помощью текстового редактора.

Хранение целого числа 3 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Необходимо обеспечить хранение числа Текстовый файл: '1' = 0x31 '0' = 0x30 Двоичный файл: =

Хранение целого числа (текстовый файл) 4 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Необходимо обеспечить хранение числа

Хранение целого числа (бинарный файл – F4) 5 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Необходимо обеспечить хранение числа

Хранение целого числа (бинарный файл – F3) 6 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Необходимо обеспечить хранение числа = = = = = =

Хранение целого числа (размеры файлов) 7 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Необходимо обеспечить хранение числа binary_file – 4 байта text_file – 8 байт binary_file – 4 байта text_file – 8 байт

Хранение целого числа (программа create_binfile.c) 8 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Необходимо обеспечить хранение числа #include int main() { int i = ; FILE *fp = fopen("binary_file","w"); fwrite((void*)&i,sizeof(i), 1, fp); fclose(fp); return 0; }

Размеры объектов (оператор sizeof) 9 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Для организации хранения данных в бинарных файлах необходима информация о размерах хранимых программных объектов. Для определения размера программного объекта, предназначенного для хранения данных (переменная, массив, структура). В языке Си для определения размера простых программных объектов существует оператор sizeof.

Определение размера базового типа данного 10 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» #include int main(){ printf("Sizes by type:\n" "size of int = %d\n" "size of float = %d\n" "size of char = %d\n", sizeof(int), sizeof(float), sizeof(char) ); return 0; }

Определение размера переменной 11 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» #include int main(){ int i; float f; char c; printf("Sizes by type:\n" "size of i = %d\n" "size of f = %d\n" "size of c = %d\n", sizeof(i), sizeof(f), sizeof(c) ); return 0; }

Определение размера статического массива 12 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» #include int main(){ int i[10]; float f[] = {1.1, 2.5, 6.7, 9, 10}; printf("Sizes by type:\n" "size of i = %d\n" "size of f = %d\n", sizeof(i), sizeof(f)); return 0; } $./array_sizes Sizes by type: size of i = 40 size of f = 20

Определение количества элементов в статическом массиве 13 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» #include int main(){ float f[] = {1.1, 2.5, 6.7, 9, 10}; printf("f has %d elements\n", sizeof(f)/sizeof(int) ); return 0; } $./array_elem_num f has 5 elements

Размер строки 14 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» #include int main(){ char str[] = "this is a test string"; printf("Size of str = %d, strlen = %d\n", sizeof(str), strlen(str)); return 0; } $./string_size Size of str = 22, strlen = 21

Размер динамического массива 15 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» #include int main(){ int *ptr = malloc(100); printf("Size of ptr = %d\n", sizeof(ptr) ); return 0; } $./dynamic_array_size Size of ptr = 4 Оператор sizeof не позволяет определить размер динамически выделенной памяти.

Размер структуры 16 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» #include struct my{ int i; float age; }; int main(){ struct my var; printf("Size of struct by name = %d\n" "Size of struct by name = %d\n", sizeof(struct my), sizeof(var) ); return 0; } $./struct_size Size of struct by name = 8

Размер структуры (2) 17 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» #include struct my{ int i; float f; }; int i float f struct my

Размер структуры (выравнивание ячеек памяти) 18 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» struct t1{ int i; short s; short s1; } a; s_a = sizeof(a); struct t1{ short s; int i; short s1; } b; s_b = sizeof(b); iss1 is

Функции работы с файлом 19 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» size_t fread(void * buf, size_t size, size_t count, FILE * fp); size_t fwrite(const void * buf, size_t size, size_t count, FILE * fp); buf – Область памяти, из которой (в которую) осуществляется запись (чтение) данных. Область рассматривается как массив однотипных элементов. size – размер одного элемента массива buf. count – количество элементов в массиве buf. fp – указатель на структуру типа FILE, который используется для определения с каким оз открытых программой файлов производится указанное действие. Возвращается количество прочитанных (записанных) элементов.

Запись переменных в бинарные файлы 20 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» #include int main() { int i = ; float j = 1.0; FILE *fp = fopen("binary_file","w"); // Запись целочисленной переменной fwrite((void*)&i,sizeof(i), 1, fp); // Запись вещественной переменной fwrite((void*)&f,sizeof(f), 1, fp); fclose(fp); return 0; }

Чтение переменных в бинарные файлы 21 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» #include int main() { int i; float j; FILE *fp = fopen("binary_file","w"); // Чтение целочисленной переменной fread((void*)&i,sizeof(i), 1, fp); // Чтение вещественной переменной fread((void*)&f,sizeof(f), 1, fp); printf("i=%d, f = %f\n",i,f); fclose(fp); return 0; }

Запись статического массива 22 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» #include int main() { int mas[] = {1, 2, 3, 4, 5, 6 }; int s = sizeof(mas)/sizeof(int); FILE *fp = fopen("array_file","w"); // Запись количества элементов fwrite((void*)&s, sizeof(s), 1, fp); // Запись содержимого массива fwrite((void*)&mas, sizeof(mas), s, fp); fclose(fp); return 0; }

Чтение статического массива 23 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» #include int main() { int mas[20]; int s; FILE *fp = fopen("array_file","w"); // Запись количества элементов fread((void*)&s, sizeof(s), 1, fp); // Запись содержимого массива fread((void*)&mas, sizeof(mas), s, fp); fclose(fp); return 0; }

Запись статического массива структур 24 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» #include struct my { char name[256]; int age; }; int main() { struct my mas[] = { {"Jack", 25},... }; int s = sizeof(mas)/sizeof(struct my); FILE *fp = fopen("sarray_file","w"); // Запись количества элементов fwrite((void*)&s, sizeof(s), 1, fp); // Запись содержимого массива fwrite((void*)&mas, sizeof(*mas), s, fp); fclose(fp); return 0; }

Запись статического массива структур 25 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» #include struct my { char name[256]; int age; }; int main() { struct my mas1[20]; int s; FILE *fp = fopen("sarray_file","w"); // Запись количества элементов fread((void*)&s, sizeof(s), 1, fp); // Запись содержимого массива fread((void*)&mas, sizeof(*mas), s, fp); fclose(fp); return 0; }

Сериализация указателей 26 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Сохранение значений указателей в бинарном файле не имеет смысла, так как в общем случае адреса могут изменяться при каждом запуске программы!

Литература 27 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» 1.Подбельский В.В, Фомин С.С. Программирование на языке Си: Учеб. пособие. - 2-е доп. изд. - М.: Финансы и статистика, с. 2.Керниган Б., Ритчи Д., Фьюер А. Язык программирования Си. Задачи по языку Си: Пер. с англ. - М.: Финанасы и статистика, Вирт Н. Алгоритмы и структуры данных: Пер. с англ. - М.: Мир, с., ил.