Файловый ввод-вывод Преподаватель: Доцент Кафедры ВС, к.т.н. Поляков Артем Юрьевич © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» ФГОБУ ВПО "СибГУТИ"

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



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

ПРОГРАММИРОВАНИЕ/ ЯЗЫКИ ПРОГРАММИРОВАНИЯ Лекция 4 Работа с бинарными файлами (весенний семестр 2012 г.) Доцент Кафедры вычислительных систем, к.т.н. Поляков.
Урок повторения по теме: «Сила». Задание 1 Задание 2.
Школьная форма Презентация для родительского собрания.
Ребусы Свириденковой Лизы Ученицы 6 класса «А». 10.
1. Определить последовательность проезда перекрестка
Типовые расчёты Растворы
ПРОГРАММИРОВАНИЕ/ ЯЗЫКИ ПРОГРАММИРОВАНИЯ Лекция 5 Структуры данных (весенний семестр 2012 г.) Доцент Кафедры вычислительных систем, к.т.н. Поляков Артем.
Работа с файлами FILE НГТУ ИРИТ кафедра ИСУ Ольга Пронина.
Масштаб 1 : 5000 Приложение 1 к решению Совета депутатов города Новосибирска от _____________ ______.
Масштаб 1 : 5000 Приложение 1 к решению Совета депутатов города Новосибирска от _____________ ______.
Потоки (файлы) Функции и типы для работы с потоками в стиле С описаны в модуле stdio.h. В отличие от Паскаля в С с потоком не связан тип данных. Поток.
Практическое занятие Вводное занятие Преподаватели: Доцент Кафедры ВС, к.т.н. Поляков Артем Юрьевич © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
ФГОБУ ВПО "СибГУТИ" Кафедра вычислительных систем УКАЗАТЕЛИ Преподаватель: Доцент Кафедры ВС, к.т.н. Поляков Артем Юрьевич © Кафедра вычислительных систем.
ОСНОВЫ ПРОГРАММИРОВАНИЯ Раздел 2. Математические основы программирования Логические алгоритмы Старший преподаватель Кафедры ВС, к.т.н. Поляков Артем Юрьевич.
Разработал: Учитель химии, биологии высшей квалификационной категории Баженов Алексей Анатольевич.
Michael Jackson

Алгоритмы внешней сортировки (часть I, базовые понятия и алгоритмы) Преподаватель: Доцент Кафедры ВС, к.т.н. Поляков Артем Юрьевич © Кафедра вычислительных.
Масштаб 1 : 5000 Приложение 1 к решению Совета депутатов города Новосибирска от
Транксрипт:

Файловый ввод-вывод Преподаватель: Доцент Кафедры ВС, к.т.н. Поляков Артем Юрьевич © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» ФГОБУ ВПО "СибГУТИ" Кафедра вычислительных систем ЯЗЫКИ ПРОГРАММИРОВАНИЯ / ПРОГРАММИРОВАНИЕ

Количество элементов © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» 2 int i;

Последовательность © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» 3 Последовательность с базовым типом T 0 это либо пустая последовательность, либо конкатенация последовательности (с базовым типом T 0 ) и значения типа T 0. Например, пусть базовый тип – char (символ), тогда: 1) S 1 = - пустая последовательность 2) S 2 = a, b, c = a, b & c = ( a & b) & c = (( &a ) & b) & c, где "&" – операция конкатенации (сцепления, склеивания). S1S1 S2S2 a a b b c c S2S2 a a b b c c & S2S2 a a b b c c && S2S2 a a b b c c &&&

Последовательность © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» 4 Если x = x 1, x 2, …, x n - непустая последовательность, то first(x) = x 1 обозначает ее первый элемент. Если x = x 1, x 2, …, x n - непустая последовательность, то rest(x) = x 2, …, x n обозначает последовательность без ее первой компоненты. Справедливо: x first(x) & rest(x). Число элементов последовательности не ограничено. x a a b b 1 1 c c d d 2 2 ! ! first(x) a a b b 1 1 c c d d 2 2 ! ! rest(x) x = a a b b 1 1 c c d d 2 2 ! ! &

Доступ к элементам © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» 5 Массив x a a b b 1 1 c c d d 2 2 ! ! x[3] = *(ptr(x) + 3) = 'c' Последовательность x a a b b 1 1 c c d d 2 2 ! ! x = rest(x) x 3 = first(x) x b b 1 1 c c d d 2 2 ! ! x 1 1 c c d d 2 2 ! ! x c c d d 2 2 ! ! c c

Области применения © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» 6 Массивы и структуры (записи) допускают произвольный доступ к своим элементам. Их используют, размещая в оперативной памяти. Последовательности используют для работы с данными на внешних устройствах хранения, допускающих только последовательный доступ (жесткие диски, магнитные ленты и т.д.)

Применение последовательностей © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» 7 Особенность – возможность прямого доступа только к элементу first(x). Последовательный доступ, имеющий такое ограничение, позволяет обеспечить: 1)простое управление памятью; 2)применение эффективных методов буферизации. Буферизация – накопление данных из потока в буфере и последующую пересылку целиком содержимого буфера, как только он заполнится. Это обеспечивает эффективность управления памятью. Последовательности обычно используют в случаях, когда данные пересылаются с одного устройства хранения на другое, например, с жесткого диска в оперативную память и обратно.

Файловая переменная (Pascal) © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» 8 Файлы – динамические структуры данных, хранящиеся на внешних запоминающих устройствах. Файловая переменная – структура данных, связывающая программу с некоторым файлом на диске. Дисциплина последовательного доступа – ограниченный набор специальных операций. В математическом описании алгоритма выражение s i для последовательности s имеет значение. В программе получение значения элемента s i из файла, содержащего последовательность, не является элементарной операцией (требует вычитывания значений с 1 по i – 1)

Операции последовательного доступа © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» 9 Опер.Описание f = opennew(n) f = openold(n) связывание программы и последовательности x, расположенной в файле с именем n close( f ) закрытие файлового соединения write(f, c) Запись нового элемента c в текущую позицию последовательности x, описываемую файловой переменной f. с = read( f ) Чтение элемента, расположенного в текущей позиции последовательности x, описываемой файловой переменной f, в ячейку c. set(f, p) Установка текущей позиции последовательности x, описываемой файловой переменной f, в значение смещения p.

Операция open © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» 10 Программа HDD (жесткий диск) x a a b b 1 1 c c d d 2 2 A A B B C C D D E E F F G G H H Файл n 2 f = opennew(n 1 ) x L = x R = x L = x R = f = openold(n 2 ) x L = x R = x x L = x R = x x Файл n 1

Операция write © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» 11 Программа HDD (жесткий диск) f = opennew(n 1 ) x L = x R = x = x L & x R x L = x R = x = x L & x R x

Операция write © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» 12 Программа HDD (жесткий диск) f = opennew(n 1 ) x L = x = x L & x R x L = x = x L & x R write( f, 'a' ) x L = x R = x = x L & x R x L = x R = x = x L & x R x a a

Операция write © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» 13 Программа HDD (жесткий диск) f = opennew(n 1 ) x L = x R = x = x L & x R x L = x R = x = x L & x R write( f, 'a' ) x L = x R = x = x L & x R x L = x R = x = x L & x R x a a write( f, 'b' ) x L = x R = x = x L & x R x L = x R = x = x L & x R b b

Операция write © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» 14 Программа HDD (жесткий диск) f = opennew(n 1 ) x L = x R = x = x L & x R x L = x R = x = x L & x R write( f, 'a' ) x L = x R = x = x L & x R x L = x R = x = x L & x R x a a write( f, 'b' ) x L = x R = x = x L & x R x L = x R = x = x L & x R b b write( f, 'c' ) x L = x R = x = x L & x R x L = x R = x = x L & x R c c

Операция read © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» 15 Программа HDD (жесткий диск) x a a b b 1 1 c c d d 2 2 f = openold(n 2 ) x L = x R = x = x L & x R x L = x R = x = x L & x R

Операция read © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» 16 Программа HDD (жесткий диск) x a a b b 1 1 c c d d 2 2 f = openold(n 2 ) x L = x R = x = x L & x R x L = x R = x = x L & x R c = read( f ) x L = x R = x = x L & x R x L = x R = x = x L & x R

Операция read © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» 17 Программа HDD (жесткий диск) x a a b b 1 1 c c d d 2 2 f = openold(n 2 ) x L = x R = x = x L & x R x L = x R = x = x L & x R c = read( f ) x L = x R = x = x L & x R x L = x R = x = x L & x R c = read( f ) x L = x R = x = x L & x R x L = x R = x = x L & x R

Операция set © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» 18 Программа HDD (жесткий диск) x a a b b 1 1 c c d d 2 2 f = openold(n 2 ) x L = x R = x = x L & x R x L = x R = x = x L & x R

Операция set © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» 19 Программа HDD (жесткий диск) x a a b b 1 1 c c d d 2 2 f = openold(n 2 ) x L = x R = x = x L & x R x L = x R = x = x L & x R c = set( f, 3) x L = x R = x = x L & x R x L = x R = x = x L & x R

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

Средства низкоуровневого ввода-вывода языка СИ 21 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» #include int open(const char *pathname, int flags); #include int close(int fd); ssize_t read(int fd, void *buf, size_t count); ssize_t write(int fd, const void *buf, size_t count); #include off_t lseek(int fd, off_t offset, int whence); O_RDONLY O_WRONLY O_RDWR

Пример использования низкоуровневого ввода-вывода 22 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Код программыПамять программы Память ОС Файловая система file1 file2

Пример использования низкоуровневого ввода-вывода 23 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Код программыПамять программы Память ОС fd1 fd2 buf Файловая система file1 file2

Пример использования низкоуровневого ввода-вывода 24 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Код программыПамять программы Память ОС fd1 fd2 file1 file2 ->file1 buf Файловая система

Пример использования низкоуровневого ввода-вывода 25 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Код программыПамять программы Память ОС fd1 fd2 file1 file2 ->file1 buf Файловая система

Пример использования низкоуровневого ввода-вывода 26 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Код программыПамять программы Память ОС fd1 fd2 file1 file2 ->file1->file2 buf Файловая система

Пример использования низкоуровневого ввода-вывода 27 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Код программыПамять программы Память ОС fd1 fd2 file1 file2 ->file1->file2 buf Файловая система

Пример использования низкоуровневого ввода-вывода 28 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Код программыПамять программы Память ОС fd1 fd2 file1 file2 ->file2 buf Файловая система

Пример использования низкоуровневого ввода-вывода 29 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Код программыПамять программы Память ОС fd1 fd2 file1 file2 buf Файловая система

Пример использования низкоуровневого ввода-вывода 30 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Код программы Память ОС ->file1 Файловая система 0

Пример использования низкоуровневого ввода-вывода 31 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Код программы Память ОС ->file1 Файловая система 0

Пример использования низкоуровневого ввода-вывода 32 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Код программы Память ОС ->file1 Файловая система 010

Пример использования низкоуровневого ввода-вывода 33 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Код программы Память ОС ->file1 Файловая система 01020

Пример использования низкоуровневого ввода-вывода 34 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Код программы Память ОС ->file1 Файловая система

Пример использования низкоуровневого ввода-вывода 35 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Код программы Память ОС ->file1 Файловая система

Высокоуровневый интерфейс ввода-вывода языка СИ 36 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» #include FILE *fopen(const char *path, const char *mode); int fclose(FILE *fp); int fscanf(FILE *stream, const char *format,...); int fprintf(FILE *stream, const char *format,...); char *fgets(char *s, int size, FILE *stream); size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream); size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream); int fseek(FILE *stream, long offset, int whence); long ftell(FILE *stream); void rewind(FILE *stream); Управление связанными программными объектами Чтение/запись данных Позиционирование в потоке

Пример использования высокоуровневого ввода-вывода 37 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Код программы Станд. библиотека GLibC Ядро ОС file1 file2 Файловая система Программа s2s1 val

Пример использования высокоуровневого ввода-вывода 38 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Код программы Станд. библиотека GLibC Ядро ОС file1 file2 Файловая система Программа s2s1 val

Пример использования высокоуровневого ввода-вывода 39 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Код программы Станд. библиотека GLibC Ядро ОС file1 file2 Файловая система Программа s2s1 FILE fd1->file1 val

Пример использования высокоуровневого ввода-вывода 40 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Код программы Станд. библиотека GLibC Ядро ОС file1 file2 Файловая система Программа s2s1 FILE fd1->file1 val

Пример использования высокоуровневого ввода-вывода 41 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Код программы Станд. библиотека GLibC Ядро ОС file1 file2 Файловая система Программа s2s1 FILE fd1->file1 val

Пример использования высокоуровневого ввода-вывода 42 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Код программы Станд. библиотека GLibC Ядро ОС file1 file2 Файловая система Программа s2s1 FILE fd1->file1 FILE ->file2 fd2 val

Пример использования высокоуровневого ввода-вывода 43 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Код программы Станд. библиотека GLibC Ядро ОС file1 file2 Файловая система Программа s2s1 FILE fd1->file1 FILE ->file2 fd2 val

Пример использования высокоуровневого ввода-вывода 44 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Код программы Станд. библиотека GLibC Ядро ОС file1 file2 Файловая система Программа s2s1 FILE fd1->file1 FILE ->file2 fd2 val

Пример использования высокоуровневого ввода-вывода 45 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Код программы Станд. библиотека GLibC Ядро ОС file1 file2 Файловая система Программа s2s1 val FILE ->file2 fd2

Пример использования высокоуровневого ввода-вывода 46 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Код программы Станд. библиотека GLibC Ядро ОС file1 file2 Файловая система Программа s2s1 val

Пример использования высокоуровневого ввода-вывода 47 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Код программы Файловая система file1

Литература 48 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» 1.Вирт Н. Алгоритмы и структуры данных: Пер. с англ. – М.: Мир, с., ил.