Периферийные устройства
<<  Организация ввода и вывода данных Ввод-вывод  >>
Системные вызовы ввода и вывода
Системные вызовы ввода и вывода
По завершении этого раздела вы сможете:
По завершении этого раздела вы сможете:
Что такое файл
Что такое файл
open(2)
open(2)
Флаги open
Флаги open
Флаги open (продолжение)
Флаги open (продолжение)
Open - примеры
Open - примеры
Open – примеры (продолжение)
Open – примеры (продолжение)
Что делает open
Что делает open
Что делает open(2)
Что делает open(2)
close (2)
close (2)
read (2)
read (2)
write (2)
write (2)
Копирование ввода в вывод - пример
Копирование ввода в вывод - пример
fsync (2)
fsync (2)
lseek (2)
lseek (2)
Параметр whence
Параметр whence
Разреженные файлы
Разреженные файлы
dup (2)
dup (2)
Что делает dup (2)
Что делает dup (2)
Что делает dup (2)
Что делает dup (2)
fcntl (2)
fcntl (2)
Команды fcntl(2)
Команды fcntl(2)
struct flock
struct flock
mmap (2)
mmap (2)
Mmap - параметры
Mmap - параметры
munmap (2)
munmap (2)
msync (2)
msync (2)
Флаги msync
Флаги msync

Презентация: «Системные вызовы ввода и вывода». Автор: Dmitry Irtegov. Файл: «Системные вызовы ввода и вывода.ppt». Размер zip-архива: 58 КБ.

Системные вызовы ввода и вывода

содержание презентации «Системные вызовы ввода и вывода.ppt»
СлайдТекст
1 Системные вызовы ввода и вывода

Системные вызовы ввода и вывода

Системные вызовы и библиотеки Unix SVR4 Иртегов Д.В. ФФ/ФИТ НГУ Электронный лекционный курс подготовлен в рамках реализации Программы развития НИУ-НГУ на 2009-2018 г.г.

2 По завершении этого раздела вы сможете:

По завершении этого раздела вы сможете:

Описать характеристики файла открыть/закрыть файл читать и изменять данные в файле изменять позицию чтения/записи файла создавать копию файлового дескриптора управлять доступом к файлу

3 Что такое файл

Что такое файл

Последовательность байтов операционная система не накладывает никакого формата адресация с точностью до байта дисковый файл автоматически расширяется при записи метка конца файла не входит в данные файла файл также является универсальным интерфейсом с внешним устройством

4 open(2)

open(2)

ИСПОЛЬЗОВАНИЕ #include <sys/types.h> #include <fcntl.h> #include <sys/stat.h> int open (const char *path, int oflag, ... /* mode_t mode */); ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ успех - неотрицательный дескриптор файла неуспех - -1 и errno установлена

5 Флаги open

Флаги open

O_RDONLY Открывает файл для чтения. O_WRONLY Открывает файл для записи. O_RDWR Открывает файл для чтения и для записи. O_APPEND Перед каждой записью помещает указатель файла в конец файла. Иными словами, все операции записи будут происходить в конец файла. O_CREAT Создает файл, если он не существует. O_TRUNC Стирает данные файла, устанавливая размер файла равным нулю. O_EXCL Используется совместно с O_CREAT. Вызывает неуспех open(2), если файл уже существует.

6 Флаги open (продолжение)

Флаги open (продолжение)

O_SYNC Заставляет write(2) ожидать окончания физической записи на диск. O_NDELAY,O_NONBLOCK Открытие специального байт-ориентированного файла или именованного программного канала часто вызывает блокировку. Любой из этих флагов предотвращает блокировку open(2). Если установлены оба флага, O_NONBLOCK получает приоритет. O_NOCTTY Не открывает файл терминала как управляющий терминал.

7 Open - примеры

Open - примеры

Открытие файла для чтения acctfd = open(account, O_RDONLY); открытие файла для записи file = TMPFILE; fd = open(file, O_WRONLY | O_CREAT | O_TRUNC, 0600); открытие файла для дописывания logfd = open("/sys/log", O_WRONLY | O_APPEND | O_CREAT, 0600);

8 Open – примеры (продолжение)

Open – примеры (продолжение)

Открытие файла для чтения и записи fdin = open( argv[1], O_RDWR ); создание нового файла для записи if ((fdout = open(tmpfile, O_WRONLY | O_CREAT | O_EXCL, 0666)) == -1) perror(tmpfile);

9 Что делает open

Что делает open

Файл ищется в иерархии директорий для получения inode-номера. Проверяются права доступа файла в таблице дескрипторов размещается новый дескриптор. Проверяются системные структуры файлов и, если необходимо, размещается новое поле. Если необходимо, размещается новая структура информации о файле. Соединяется с подходящим драйвером устройства. Возвращается файловый дескриптор (индекс в таблице файловых

10 Что делает open(2)

Что делает open(2)

User area

Дескриптор файла 0

0

1

Дескриптор файла 1

2

3

Дескриптор файла 2

4

Дескриптор файла 4

11 close (2)

close (2)

ИСПОЛЬЗОВАНИЕ #include <unistd.h> int close(int fildes); ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ успех - 0 неуспех - -1, errno присвоен код ошибки

12 read (2)

read (2)

ИСПОЛЬЗОВАНИЕ #include <sys/types.h> #include <unistd.h> ssize_t read( int fildes, void *buf, size_t nbyte); #include <sys/uio.h> ssize_t readv(int fildes, struct iovec *iov, int iovcnt); ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ успех - количество прочитанных байт неуспех - -1 и errno установлена

13 write (2)

write (2)

ИСПОЛЬЗОВАНИЕ #include <sys/types/h> #include <unistd.h> ssize_t write( int fildes, const void *buf, size_t nbyte); #include <sys/uio.h> ssize_t writev(int fildes, const struct iovec *iov, int iovcnt); ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ успех - количество записанных байт неуспех - -1 и errno установлена

14 Копирование ввода в вывод - пример

Копирование ввода в вывод - пример

1 #include <unistd.h> 2 #include <stdio.h> 3 #include <stdlib.h> 4 5 main() 6 { 7 char buf[BUFSIZ]; 8 int n; 9 10 while ((n = read(0, buf, BUFSIZ)) > 0) 11 write(1, buf, n); 12 exit(0); 13 }

15 fsync (2)

fsync (2)

ИСПОЛЬЗОВАНИЕ #include <unistd.h> int fsync(int fildes); ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ успех - 0 неуспех - -1 и errno установлена

16 lseek (2)

lseek (2)

ИСПОЛЬЗОВАНИЕ #include <sys/types.h> #include <unistd.h> off_t lseek( int fildes, off_t offset, int whence); ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ успех - расстояние в байтах от начала файла неуспех - -1 и errno установлена

17 Параметр whence

Параметр whence

SEEK_CUR — от текущей позиции SEEK_SET — от начала файла SEEK_END — от конца файла

18 Разреженные файлы

Разреженные файлы

«Дырка» - участок файла, в который никогда не было записи Считается в длину файла При чтении считываются нули Дисковое пространство не выделяется

19 dup (2)

dup (2)

ИСПОЛЬЗОВАНИЕ #include <unistd.h> int dup (int fildes); ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ успех - неотрицательный файловый дескриптор неуспех - -1 и errno установлена

20 Что делает dup (2)

Что делает dup (2)

User area

Дескриптор файла 0

0

1

Дескриптор файла 1

2

3

Дескриптор файла 2

4

Дескриптор файла 4

21 Что делает dup (2)

Что делает dup (2)

i=dup(4);

User area

Дескриптор файла 0

0

1

Дескриптор файла 1

2

3

Дескриптор файла 2

4

Дескриптор файла 4

22 fcntl (2)

fcntl (2)

ИСПОЛЬЗОВАНИЕ #include <sys/types.h> #include <fcntl.h> #include <unistd.h> int fcntl(int fildes, int cmd, ... /* arg */ ); ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ успех - зависит от команды cmd неуспех - -1 и errno установлена

23 Команды fcntl(2)

Команды fcntl(2)

Без arg F_GETFD - получить состояние флага закрытия-по-exec F_GETFL - получить флаги файла (NDELAY, NONBLOCK, SYNCH, APPEND) int arg F_DUPFD - скопировать файловый дескриптор F_SETFD - установить флаг закрытия-по-exec F_SETFL - установить флаги файла struct flock *arg F_FREESP - освободить физический носитель F_GETLK - получить информацию о захватах записи F_SETLK - захватить запись F_SETLKW- захватить запись (с блокировкой)

24 struct flock

struct flock

typedef struct flock { short l_type; short l_whence; /* SEEK_SET, SEEK_CUR, SEEK_END */ off_t l_start; off_t l_len; /* len == 0 means until end of file */ long l_sysid; pid_t l_pid; long pad[4]; /* reserve area */ } flock_t;

25 mmap (2)

mmap (2)

ИСПОЛЬЗОВАНИЕ #include <sys/types.h> #include <sys/mman.h> caddr_t mmap( caddr_t addr, size_t len, int prot, int flags, int fd, off_t off); ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ успех - адрес неуспех - NULL и errno установлена

26 Mmap - параметры

Mmap - параметры

PROT_READ можно читать

prot

PROT_WRITE можно изменять

PROT_EXEC можно исполнять

MAP_SHARED разделяемые изменения

flags

MAP_PRIVATE частные изменения

MAP_ANON эквивалент mmap /dev/zero

27 munmap (2)

munmap (2)

ИСПОЛЬЗОВАНИЕ #include <sys/types.h> #include <sys/mman.h> int munmap(caddr_t addr, size_t len); ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ успех - 0 неуспех - -1 и errno установлена

28 msync (2)

msync (2)

ИСПОЛЬЗОВАНИЕ #include <sys/types/h> #include <sys/mman.h> int msync(caddr_t addr, size_t len, int flags); ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ успех - 0 неуспех - -1 и errno установлена

29 Флаги msync

Флаги msync

MS_ASYNC немедленно вернуться, как только спланированы все операции записи MS_SYNC вернуться, только когда завершатся все операции записи MS_INVALIDATE помечает страницы памяти как недействительные. После этого любое обращение к этим адресам вызывает чтение с диска.

«Системные вызовы ввода и вывода»
http://900igr.net/prezentacija/informatika/sistemnye-vyzovy-vvoda-i-vyvoda-121101.html
cсылка на страницу
Урок

Информатика

130 тем
Слайды