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

ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ВЫСОКОГО УРОВНЯ …eperyshkova/downloads/prog/2016-2017/pro… · Количество элементов int i;

  • Upload
    others

  • View
    40

  • Download
    0

Embed Size (px)

Citation preview

Page 1: ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ВЫСОКОГО УРОВНЯ …eperyshkova/downloads/prog/2016-2017/pro… · Количество элементов int i;

Преподаватель:

Перышкова Евгения Николаевна

© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»

Дисциплины

"ПРОГРАММИРОВАНИЕ"

Файловый ввод-вывод

Page 2: ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ВЫСОКОГО УРОВНЯ …eperyshkova/downloads/prog/2016-2017/pro… · Количество элементов int i;

Использование файлов

• Информация, размещенная на жестких дисках сохраняется

после перезагрузки компьютера.

• Для хранения информации на жестких дисках используются

файлы.

• Программа не может работать с данными, расположенными в

файле непосредственно. Для обработки необходимо сначала

считать их в оперативную память (в переменную или массив).

• В программе файл описывается с помощью специальной

структуры данных (FILE *), которая хранит информацию,

необходимую для корректного доступа к нему.

• Программа может работать с большим количеством файлов

одновременно, вбор нужного файла определяется переменной,

хранящей указатель на соответствующую структуру (FILE *).

Page 3: ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ВЫСОКОГО УРОВНЯ …eperyshkova/downloads/prog/2016-2017/pro… · Количество элементов int i;

Количество элементов

int i; <-- 1 элемент типа int

float mas[10]; <-- 10 элементов типа int

struct my{

int age;

char name[20];

struct my *next;

} table[10]; <-- 10 элементов типа struct my

Количество элементов в типах данных, рассмотренных к

настоящему моменту является конечным:

Большинство усложненных структур , например:

1) последовательности;

2) деревья;

3) графы;

характеризуются тем, что количество элементов в них заранее не

определено и может стремиться к бесконечности.

Page 4: ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ВЫСОКОГО УРОВНЯ …eperyshkova/downloads/prog/2016-2017/pro… · Количество элементов int i;

Последовательность

Последовательность с базовым типом T0 это либо пустая

последовательность, либо конкатенация последовательности

(с базовым типом T0) и значения типа T0.

Например, пусть базовый тип – char (символ), тогда:

1) S1 = ‹ › - пустая последовательность

2) S2 = ‹ a, b, c › = ‹ a, b › & c = (‹ a › & b) & c = ((‹ › &a ) & b) & c,

где "&" – операция конкатенации (сцепления, склеивания).

S1

S2 a b c

S2 a b c&

S2 a b c&&

S2 a b c&&&

Page 5: ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ВЫСОКОГО УРОВНЯ …eperyshkova/downloads/prog/2016-2017/pro… · Количество элементов int i;

Последовательность

Если x = ‹ x1, x2, …, xn › - непустая последовательность, то

first(x) = x1 обозначает ее первый элемент.

Если x = ‹ x1, x2, …, xn › - непустая последовательность, то

rest(x) = ‹ x2, …, xn › обозначает последовательность без ее первой

компоненты.

Справедливо: x ≡ first(x) & rest(x).

Число элементов последовательности не ограничено.

x a b 1 c d 2 !

first(x)

a b 1 c d 2 !

rest(x)

x = a b 1 c d 2 !&

Page 6: ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ВЫСОКОГО УРОВНЯ …eperyshkova/downloads/prog/2016-2017/pro… · Количество элементов int i;

Доступ к элементам

Массивx a b 1 c d 2 !

0 1 2 3 4 5 6

3

x[3] = *(ptr(x) + 3) = 'c'

Последовательность x a b 1 c d 2 !

x = rest(x)

x = rest(x)

x = rest(x)

x3 = first(x)

x b 1 c d 2 !

x 1 c d 2 !

x c d 2 !

c

Page 7: ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ВЫСОКОГО УРОВНЯ …eperyshkova/downloads/prog/2016-2017/pro… · Количество элементов int i;

Области применения

Массивы и структуры (записи) допускают

произвольный доступ к своим элементам. Их используют,

размещая в оперативной памяти.

Последовательности используют для работы с

данными на внешних устройствах хранения,

допускающих только последовательный доступ (жесткие

диски, магнитные ленты и т.д.)

Page 8: ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ВЫСОКОГО УРОВНЯ …eperyshkova/downloads/prog/2016-2017/pro… · Количество элементов int i;

Применение последовательностей

Особенность – возможность прямого доступа

только к элементу first(x).

Последовательный доступ, имеющий такое ограничение,

позволяет обеспечить:

1)простое управление памятью;

2)применение эффективных методов буферизации.

Буферизация – накопление данных из потока в буфере и

последующую пересылку целиком содержимого буфера,

как только он заполнится. Это обеспечивает эффективность

управления памятью.

Последовательности обычно используют в случаях, когда данные

пересылаются с одного устройства хранения на другое, например, с

жесткого диска в оперативную память и обратно.

Page 9: ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ВЫСОКОГО УРОВНЯ …eperyshkova/downloads/prog/2016-2017/pro… · Количество элементов int i;

Файловая переменная

Файлы – динамические структуры данных,

хранящиеся на внешних запоминающих устройствах.

Файловая переменная – структура данных,

связывающая программу с некоторым файлом на диске.

Дисциплина последовательного доступа –

ограниченный набор специальных операций.

В математическом описании алгоритма выражение si для

последовательности s имеет значение.

В программе получение значения элемента si из файла,

содержащего последовательность,

не является элементарной операцией

(требует вычитывания значений с 1 по i – 1)

Page 10: ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ВЫСОКОГО УРОВНЯ …eperyshkova/downloads/prog/2016-2017/pro… · Количество элементов int i;

Операции последовательного доступа

Опер. Описание

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.

Page 11: ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ВЫСОКОГО УРОВНЯ …eperyshkova/downloads/prog/2016-2017/pro… · Количество элементов int i;

Операция open

Программа

HDD (жесткий диск)

x a b 1 c d 2 A B C D E F G H

Файл n2

f = opennew(n1)

xL = < >

xR = < >

f = openold(n2)

xL = < >

xR = x

x

Файл n1

Page 12: ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ВЫСОКОГО УРОВНЯ …eperyshkova/downloads/prog/2016-2017/pro… · Количество элементов int i;

Операция write

Программа

HDD (жесткий диск)

f = opennew(n1)

xL = < >

xR = < >

x = xL & xR

x

Page 13: ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ВЫСОКОГО УРОВНЯ …eperyshkova/downloads/prog/2016-2017/pro… · Количество элементов int i;

Операция write

Программа

HDD (жесткий диск)

f = opennew(n1)

xL = < >

xL = < >

x = xL & xR

write( f , 'a' )

xL = < 'a' >

xR = < >

x = xL & xR

x a

Page 14: ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ВЫСОКОГО УРОВНЯ …eperyshkova/downloads/prog/2016-2017/pro… · Количество элементов int i;

Операция write

Программа

HDD (жесткий диск)

f = opennew(n1)

xL = < >

xR = < >

x = xL & xR

write( f , 'a' )

xL = < 'a' >

xR = < >

x = xL & xR

x a

write( f , 'b' )

xL = < 'ab' >

xR = < >

x = xL & xR

b

Page 15: ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ВЫСОКОГО УРОВНЯ …eperyshkova/downloads/prog/2016-2017/pro… · Количество элементов int i;

Операция write

Программа

HDD (жесткий диск)

f = opennew(n1)

xL = < >

xR = < >

x = xL & xR

write( f , 'a' )

xL = < 'a' >

xR = < >

x = xL & xR

x a

write( f , 'b' )

xL = < 'ab' >

xR = < >

x = xL & xR

b

write( f , 'c' )

xL = < 'abc' >

xR = < >

x = xL & xR

c

Page 16: ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ВЫСОКОГО УРОВНЯ …eperyshkova/downloads/prog/2016-2017/pro… · Количество элементов int i;

Операция read

Программа

HDD (жесткий диск)

x a b 1 c d 2

f = openold(n2)

xL = < >

xR = < 'ab1cd2' >

x = xL & xR

Page 17: ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ВЫСОКОГО УРОВНЯ …eperyshkova/downloads/prog/2016-2017/pro… · Количество элементов int i;

Операция read

Программа

HDD (жесткий диск)

x a b 1 c d 2

f = openold(n2)

xL = < >

xR = < 'ab1cd2' >

x = xL & xR

c = read( f )

xL = < 'a' >

xR = < 'b1cd2' >

x = xL & xR

Page 18: ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ВЫСОКОГО УРОВНЯ …eperyshkova/downloads/prog/2016-2017/pro… · Количество элементов int i;

Операция read

Программа

HDD (жесткий диск)

x a b 1 c d 2

f = openold(n2)

xL = < >

xR = < 'ab1cd2' >

x = xL & xR

c = read( f )

xL = < 'a' >

xR = < 'b1cd2' >

x = xL & xR

c = read( f )

xL = < 'ab' >

xR = < '1cd2' >

x = xL & xR

Page 19: ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ВЫСОКОГО УРОВНЯ …eperyshkova/downloads/prog/2016-2017/pro… · Количество элементов int i;

Операция set

Программа

HDD (жесткий диск)

x a b 1 c d 2

f = openold(n2)

xL = < >

xR = < 'ab1cd2' >

x = xL & xR

Page 20: ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ВЫСОКОГО УРОВНЯ …eperyshkova/downloads/prog/2016-2017/pro… · Количество элементов int i;

Операция set

Программа

HDD (жесткий диск)

x a b 1 c d 2

f = openold(n2)

xL = < >

xR = < 'ab1cd2' >

x = xL & xR

c = set( f , 3)

xL = < 'ab1' >

xR = < 'cd2' >

x = xL & xR

Page 21: ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ВЫСОКОГО УРОВНЯ …eperyshkova/downloads/prog/2016-2017/pro… · Количество элементов int i;

Средства низкоуровневого

ввода-вывода языка СИ

#include <sys/stat.h>

#include <fcntl.h>

int open(const char *pathname, int flags);

#include <unistd.h>

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 <sys/types.h>

#include <unistd.h>

off_t lseek(int fd, off_t offset, int whence);

O_RDONLY

O_WRONLY

O_RDWR

Page 22: ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ВЫСОКОГО УРОВНЯ …eperyshkova/downloads/prog/2016-2017/pro… · Количество элементов int i;

Пример использования

низкоуровневого ввода-вывода

Код программы Память

программы

Память

ОС

Файловая система

file1

file2

Page 23: ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ВЫСОКОГО УРОВНЯ …eperyshkova/downloads/prog/2016-2017/pro… · Количество элементов int i;

Пример использования

низкоуровневого ввода-вывода

Код программы Память

программы

Память

ОС

fd1

fd2

buf

Файловая система

file1

file2

Page 24: ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ВЫСОКОГО УРОВНЯ …eperyshkova/downloads/prog/2016-2017/pro… · Количество элементов int i;

Пример использования

низкоуровневого ввода-вывода

Код программы Память

программы

Память

ОС

fd1

fd2

file1

file2

->file1

buf

Файловая система

Page 25: ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ВЫСОКОГО УРОВНЯ …eperyshkova/downloads/prog/2016-2017/pro… · Количество элементов int i;

Пример использования

низкоуровневого ввода-вывода

Код программы Память

программы

Память

ОС

fd1

fd2

file1

file2

->file1

buf

Файловая система

Page 26: ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ВЫСОКОГО УРОВНЯ …eperyshkova/downloads/prog/2016-2017/pro… · Количество элементов int i;

Пример использования

низкоуровневого ввода-вывода

Код программы Память

программы

Память

ОС

fd1

fd2

file1

file2

->file1

->file2

buf

Файловая система

Page 27: ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ВЫСОКОГО УРОВНЯ …eperyshkova/downloads/prog/2016-2017/pro… · Количество элементов int i;

Пример использования

низкоуровневого ввода-вывода

Код программы Память

программы

Память

ОС

fd1

fd2

file1

file2

->file1

->file2

buf

Файловая система

Page 28: ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ВЫСОКОГО УРОВНЯ …eperyshkova/downloads/prog/2016-2017/pro… · Количество элементов int i;

Пример использования

низкоуровневого ввода-вывода

Код программы Память

программы

Память

ОС

fd1

fd2

file1

file2

->file1

->file2

buf

Файловая система

Page 29: ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ВЫСОКОГО УРОВНЯ …eperyshkova/downloads/prog/2016-2017/pro… · Количество элементов int i;

Пример использования

низкоуровневого ввода-вывода

Код программы Память

программы

Память

ОС

fd1

fd2

file1

file2

->file2

buf

Файловая система

Page 30: ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ВЫСОКОГО УРОВНЯ …eperyshkova/downloads/prog/2016-2017/pro… · Количество элементов int i;

Пример использования

низкоуровневого ввода-вывода

Код программы Память

программы

Память

ОС

fd1

fd2

file1

file2

buf

Файловая система

Page 31: ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ВЫСОКОГО УРОВНЯ …eperyshkova/downloads/prog/2016-2017/pro… · Количество элементов int i;

Пример использования

низкоуровневого ввода-вывода

Код программы

Память ОС

->file1

Файловая система

0

Page 32: ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ВЫСОКОГО УРОВНЯ …eperyshkova/downloads/prog/2016-2017/pro… · Количество элементов int i;

Пример использования

низкоуровневого ввода-вывода

Код программы

Память ОС

->file1

Файловая система

0

Page 33: ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ВЫСОКОГО УРОВНЯ …eperyshkova/downloads/prog/2016-2017/pro… · Количество элементов int i;

Пример использования

низкоуровневого ввода-вывода

Код программы

Память ОС

->file1

Файловая система

010

Page 34: ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ВЫСОКОГО УРОВНЯ …eperyshkova/downloads/prog/2016-2017/pro… · Количество элементов int i;

Пример использования

низкоуровневого ввода-вывода

Код программы

Память ОС

->file1

Файловая система

01020

Page 35: ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ВЫСОКОГО УРОВНЯ …eperyshkova/downloads/prog/2016-2017/pro… · Количество элементов int i;

Пример использования

низкоуровневого ввода-вывода

Код программы

Память ОС

->file1

Файловая система

0102040

Page 36: ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ВЫСОКОГО УРОВНЯ …eperyshkova/downloads/prog/2016-2017/pro… · Количество элементов int i;

Пример использования

низкоуровневого ввода-вывода

Код программы

Память ОС

->file1

Файловая система

010204050

Page 37: ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ВЫСОКОГО УРОВНЯ …eperyshkova/downloads/prog/2016-2017/pro… · Количество элементов int i;

Высокоуровневый интерфейс

ввода-вывода языка СИ#include <stdio.h>

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);

Управление связанными программными объектами

Чтение/запись данных

Позиционирование в потоке

Page 38: ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ВЫСОКОГО УРОВНЯ …eperyshkova/downloads/prog/2016-2017/pro… · Количество элементов int i;

Пример использования

высокоуровневого ввода-вывода

Код программы

Станд. библиотека

GLibC

Ядро ОС

file1 file2

Файловая система

Программа

s2s1 val

Page 39: ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ВЫСОКОГО УРОВНЯ …eperyshkova/downloads/prog/2016-2017/pro… · Количество элементов int i;

Пример использования

высокоуровневого ввода-вывода

Код программы

Станд. библиотека

GLibC

Ядро ОС

file1 file2

Файловая система

Программа

s2s1 val

Page 40: ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ВЫСОКОГО УРОВНЯ …eperyshkova/downloads/prog/2016-2017/pro… · Количество элементов int i;

Пример использования

высокоуровневого ввода-вывода

Код программы

Станд. библиотека

GLibC

Ядро ОС

file1 file2

Файловая система

Программа

s2s1

FILE

fd1 ->file1

val

Page 41: ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ВЫСОКОГО УРОВНЯ …eperyshkova/downloads/prog/2016-2017/pro… · Количество элементов int i;

Пример использования

высокоуровневого ввода-вывода

Код программы

Станд. библиотека

GLibC

Ядро ОС

file1 file2

Файловая система

Программа

s2s1

FILE

fd1 ->file1

val

Page 42: ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ВЫСОКОГО УРОВНЯ …eperyshkova/downloads/prog/2016-2017/pro… · Количество элементов int i;

Пример использования

высокоуровневого ввода-вывода

Код программы

Станд. библиотека

GLibC

Ядро ОС

file1 file2

Файловая система

Программа

s2s1

FILE

fd1 ->file1

val

Page 43: ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ВЫСОКОГО УРОВНЯ …eperyshkova/downloads/prog/2016-2017/pro… · Количество элементов int i;

Пример использования

высокоуровневого ввода-вывода

Код программы

Станд. библиотека

GLibC

Ядро ОС

file1 file2

Файловая система

Программа

s2s1

FILE

fd1 ->file1FILE

->file2fd2

val

Page 44: ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ВЫСОКОГО УРОВНЯ …eperyshkova/downloads/prog/2016-2017/pro… · Количество элементов int i;

Пример использования

высокоуровневого ввода-вывода

Код программы

Станд. библиотека

GLibC

Ядро ОС

file1 file2

Файловая система

Программа

s2s1

FILE

fd1 ->file1FILE

->file2fd2

val

Page 45: ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ВЫСОКОГО УРОВНЯ …eperyshkova/downloads/prog/2016-2017/pro… · Количество элементов int i;

Пример использования

высокоуровневого ввода-вывода

Код программы

Станд. библиотека

GLibC

Ядро ОС

file1 file2

Файловая система

Программа

s2s1

FILE

fd1 ->file1FILE

->file2fd2

val

Page 46: ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ВЫСОКОГО УРОВНЯ …eperyshkova/downloads/prog/2016-2017/pro… · Количество элементов int i;

Пример использования

высокоуровневого ввода-вывода

Код программы

Станд. библиотека

GLibC

Ядро ОС

file1 file2

Файловая система

Программа

s2s1 val

FILE

->file2fd2

Page 47: ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ВЫСОКОГО УРОВНЯ …eperyshkova/downloads/prog/2016-2017/pro… · Количество элементов int i;

Пример использования

высокоуровневого ввода-вывода

Код программы

Станд. библиотека

GLibC

Ядро ОС

file1 file2

Файловая система

Программа

s2s1 val

Page 48: ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ВЫСОКОГО УРОВНЯ …eperyshkova/downloads/prog/2016-2017/pro… · Количество элементов int i;

Пример использования

высокоуровневого ввода-вывода

Код программы

Файловая система

file1

Page 49: ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ВЫСОКОГО УРОВНЯ …eperyshkova/downloads/prog/2016-2017/pro… · Количество элементов int i;

Литература

1. Вирт Н. Алгоритмы и структуры данных: Пер. с англ. –

М.: Мир, - 360 с., ил.