Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 11 лет назад пользователемФилипп Яцкой
1 Файловый ввод-вывод Преподаватель: Доцент Кафедры ВС, к.т.н. Поляков Артем Юрьевич © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» ФГОБУ ВПО "СибГУТИ" Кафедра вычислительных систем ЯЗЫКИ ПРОГРАММИРОВАНИЯ / ПРОГРАММИРОВАНИЕ
2 Количество элементов © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» 2 int i;
3 Последовательность © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» 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 Последовательность © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» 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 Доступ к элементам © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» 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 Области применения © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» 6 Массивы и структуры (записи) допускают произвольный доступ к своим элементам. Их используют, размещая в оперативной памяти. Последовательности используют для работы с данными на внешних устройствах хранения, допускающих только последовательный доступ (жесткие диски, магнитные ленты и т.д.)
7 Применение последовательностей © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» 7 Особенность – возможность прямого доступа только к элементу first(x). Последовательный доступ, имеющий такое ограничение, позволяет обеспечить: 1)простое управление памятью; 2)применение эффективных методов буферизации. Буферизация – накопление данных из потока в буфере и последующую пересылку целиком содержимого буфера, как только он заполнится. Это обеспечивает эффективность управления памятью. Последовательности обычно используют в случаях, когда данные пересылаются с одного устройства хранения на другое, например, с жесткого диска в оперативную память и обратно.
8 Файловая переменная (Pascal) © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» 8 Файлы – динамические структуры данных, хранящиеся на внешних запоминающих устройствах. Файловая переменная – структура данных, связывающая программу с некоторым файлом на диске. Дисциплина последовательного доступа – ограниченный набор специальных операций. В математическом описании алгоритма выражение s i для последовательности s имеет значение. В программе получение значения элемента s i из файла, содержащего последовательность, не является элементарной операцией (требует вычитывания значений с 1 по i – 1)
9 Операции последовательного доступа © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» 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.
10 Операция 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
11 Операция 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
12 Операция 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
13 Операция 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
14 Операция 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
15 Операция 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
16 Операция 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
17 Операция 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
18 Операция 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
19 Операция 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 Выравнивание данных © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» 20 Центральные процессоры в качестве основной единицы при работе с памятью используют машинное слово, размер которого может быть различным. Как правило, машинное слово равно байтам, то есть состоит из одного, двух, четырёх, восьми и т. д. байтов. Некоторые модели процессоров не могут обращаться к данным в памяти, нарушающим границы машинных слов. Некоторые могут обращаться, но к невыровненным данным обращение дольше, нежели к данным, находящимся внутри целого «машинного слова» в памяти Адрес ячейки должен быть кратен ее размеру
21 Средства низкоуровневого ввода-вывода языка СИ 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 Пример использования низкоуровневого ввода-вывода 22 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Код программыПамять программы Память ОС Файловая система file1 file2
23 Пример использования низкоуровневого ввода-вывода 23 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Код программыПамять программы Память ОС fd1 fd2 buf Файловая система file1 file2
24 Пример использования низкоуровневого ввода-вывода 24 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Код программыПамять программы Память ОС fd1 fd2 file1 file2 ->file1 buf Файловая система
25 Пример использования низкоуровневого ввода-вывода 25 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Код программыПамять программы Память ОС fd1 fd2 file1 file2 ->file1 buf Файловая система
26 Пример использования низкоуровневого ввода-вывода 26 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Код программыПамять программы Память ОС fd1 fd2 file1 file2 ->file1->file2 buf Файловая система
27 Пример использования низкоуровневого ввода-вывода 27 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Код программыПамять программы Память ОС fd1 fd2 file1 file2 ->file1->file2 buf Файловая система
28 Пример использования низкоуровневого ввода-вывода 28 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Код программыПамять программы Память ОС fd1 fd2 file1 file2 ->file2 buf Файловая система
29 Пример использования низкоуровневого ввода-вывода 29 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Код программыПамять программы Память ОС fd1 fd2 file1 file2 buf Файловая система
30 Пример использования низкоуровневого ввода-вывода 30 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Код программы Память ОС ->file1 Файловая система 0
31 Пример использования низкоуровневого ввода-вывода 31 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Код программы Память ОС ->file1 Файловая система 0
32 Пример использования низкоуровневого ввода-вывода 32 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Код программы Память ОС ->file1 Файловая система 010
33 Пример использования низкоуровневого ввода-вывода 33 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Код программы Память ОС ->file1 Файловая система 01020
34 Пример использования низкоуровневого ввода-вывода 34 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Код программы Память ОС ->file1 Файловая система
35 Пример использования низкоуровневого ввода-вывода 35 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Код программы Память ОС ->file1 Файловая система
36 Высокоуровневый интерфейс ввода-вывода языка СИ 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 Пример использования высокоуровневого ввода-вывода 37 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Код программы Станд. библиотека GLibC Ядро ОС file1 file2 Файловая система Программа s2s1 val
38 Пример использования высокоуровневого ввода-вывода 38 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Код программы Станд. библиотека GLibC Ядро ОС file1 file2 Файловая система Программа s2s1 val
39 Пример использования высокоуровневого ввода-вывода 39 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Код программы Станд. библиотека GLibC Ядро ОС file1 file2 Файловая система Программа s2s1 FILE fd1->file1 val
40 Пример использования высокоуровневого ввода-вывода 40 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Код программы Станд. библиотека GLibC Ядро ОС file1 file2 Файловая система Программа s2s1 FILE fd1->file1 val
41 Пример использования высокоуровневого ввода-вывода 41 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Код программы Станд. библиотека GLibC Ядро ОС file1 file2 Файловая система Программа s2s1 FILE fd1->file1 val
42 Пример использования высокоуровневого ввода-вывода 42 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Код программы Станд. библиотека GLibC Ядро ОС file1 file2 Файловая система Программа s2s1 FILE fd1->file1 FILE ->file2 fd2 val
43 Пример использования высокоуровневого ввода-вывода 43 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Код программы Станд. библиотека GLibC Ядро ОС file1 file2 Файловая система Программа s2s1 FILE fd1->file1 FILE ->file2 fd2 val
44 Пример использования высокоуровневого ввода-вывода 44 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Код программы Станд. библиотека GLibC Ядро ОС file1 file2 Файловая система Программа s2s1 FILE fd1->file1 FILE ->file2 fd2 val
45 Пример использования высокоуровневого ввода-вывода 45 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Код программы Станд. библиотека GLibC Ядро ОС file1 file2 Файловая система Программа s2s1 val FILE ->file2 fd2
46 Пример использования высокоуровневого ввода-вывода 46 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Код программы Станд. библиотека GLibC Ядро ОС file1 file2 Файловая система Программа s2s1 val
47 Пример использования высокоуровневого ввода-вывода 47 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Код программы Файловая система file1
48 Литература 48 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» 1.Вирт Н. Алгоритмы и структуры данных: Пер. с англ. – М.: Мир, с., ил.
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.