Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 11 лет назад пользователемswsoft.nsu.ru
1 СИСТЕМНЫЕ ВЫЗОВЫ ВВОДА И ВЫВОДА Системные вызовы и библиотеки Unix SVR4
2 По завершении этого раздела вы сможете: описать характеристики файла открыть/закрыть файл читать и изменять данные в файле изменять позицию чтения/записи файла создавать копию файлового дескриптора управлять доступом к файлу
3 ЧТО ТАКОЕ ФАЙЛ ? последовательность байтов операционная система не накладывает никакого формата адресация с точностью до байта дисковый файл автоматически расширяется при записи метка конца файла не входит в данные файла файл также является универсальным интерфейсом с внешним устройством
4 open(2) ИСПОЛЬЗОВАНИЕ #include int open (const char *path, int oflag,... /* mode_t mode */); ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ успех - неотрицательный дескриптор файла неуспех - -1 и errno установлена
5 Флаги open O_RDONLY Открывает файл для чтения. O_WRONLY Открывает файл для записи. O_RDWR Открывает файл для чтения и для записи. O_APPEND Перед каждой записью помещает указатель файла в конец файла. Иными словами, все операции записи будут происходить в конец файла. O_CREAT Создает файл, если он не существует. O_TRUNC Стирает данные файла, устанавливая размер файла равным нулю. O_EXCL Используется совместно с O_CREAT. Вызывает неуспех open(2), если файл уже существует.
6 Флаги open (продолжение) O_SYNC Заставляет write(2) ожидать окончания физической записи на диск. O_NDELAY,O_NONBLOCK Открытие специального байт-ориентированного файла или именованного программного канала часто вызывает блокировку. Любой из этих флагов предотвращает блокировку open(2). Если установлены оба флага, O_NONBLOCK получает приоритет. O_NOCTTY Не открывает файл терминала как управляющий терминал.
7 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 – примеры (продолжение) открытие файла для чтения и записи fdin = open( argv[1], O_RDWR ); создание нового файла для записи if ((fdout = open(TMPFILE, O_WRONLY | O_CREAT | O_EXCL, 0666)) == -1) perror(TMPFILE);
9 Что делает open файл ищется в иерархии директорий для получения inode-номера. проверяются права доступа файла в таблице дескрипторов размещается новый дескриптор. проверяются системные структуры файлов и, если необходимо, размещается новое поле. если необходимо, размещается новая структура информации о файле. соединяется с подходящим драйвером устройства. возвращается файловый дескриптор (индекс в таблице файловых
10 close (2) ИСПОЛЬЗОВАНИЕ #include int close(int fildes); ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ успех - 0 неуспех - -1, errno присвоен код ошибки
11 read (2) ИСПОЛЬЗОВАНИЕ #include int read( int fildes, void *buf, unsigned nbyte); #include int readv(int fildes, strcut iovec *iov, int iovcnt); ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ успех - количество прочитанных байт неуспех - -1 и errno установлена
12 write (2) ИСПОЛЬЗОВАНИЕ #include int write( int fildes, const void *buf, unsigned nbyte); #include int writev(int fildes, const struct iover *iov, int iovcnt); ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ успех - количество записанных байт неуспех - -1 и errno установлена
13 КОПИРОВАНИЕ ВВОДА В ВЫВОД - ПРИМЕР 1 #include 2 #include 3 #include 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 }
14 fsync (2) ИСПОЛЬЗОВАНИЕ #include int fsync(int fildes); ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ успех - 0 неуспех - -1 и errno установлена
15 lseek (2) ИСПОЛЬЗОВАНИЕ #include off_t lseek( int fildes, off_t offset, int whence); ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ успех - расстояние в байтах от начала файла неуспех - -1 и errno установлена
16 dup (2) ИСПОЛЬЗОВАНИЕ #include int dup (int fildes); ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ успех - неотрицательный файловый дескриптор неуспех - -1 и errno установлена
17 Что делает dup (2) User area Дескриптор файла 0 Дескриптор файла 1 Дескриптор файла 2 … Дескриптор файла 4
18 Что делает dup (2) i=dup(4); User area Дескриптор файла 0 Дескриптор файла 1 Дескриптор файла 2 … Дескриптор файла 4
19 fcntl (2) ИСПОЛЬЗОВАНИЕ #include int fcntl(int fildes, int cmd,... /* arg */ ); ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ успех - зависит от команды cmd неуспех - -1 и errno установлена
20 Команды 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- захватить запись (с блокировкой)
21 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;
22 mmap (2) ИСПОЛЬЗОВАНИЕ #include caddr_t mmap( caddr_t addr, size_t len, int prot, int flags, int fd, off_t off); ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ успех - адрес неуспех - -1 и errno установлена
23 mmap - параметры PROT_READ страницу можно читать protPROT_WRITE страницу можно писать PROT_EXEC можно исполнять MAP_SHARED разделяемые изменения flags MAP_PRIVATE частные изменения MAP_FIXED интерпретировать addr буквально
24 munmap (2) ИСПОЛЬЗОВАНИЕ #include int munmap(caddr_t addr, size_t len); ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ успех - 0 неуспех - -1 и errno установлена
25 msync (2) ИСПОЛЬЗОВАНИЕ #include int msync(caddr-t addr, size_t len, int flags); ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ успех - 0 неуспех - -1 и errno установлена
26 Флаги msync MS_ASYNC немедленно вернуться, как только спланированы все операции записи MS_SYNC вернуться, только когда завершатся все операции записи MS_INVALIDATE помечает страницы памяти как недействительные. После этого любое обращение к этим адресам вызывает чтение с диска.
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.