- •Подсистема управления вводом-выводом
- •Int creat(const char *path, mode_t mode);
- •Int open(const char *path, int oflag, ...);
- •Int fildes;
- •Int close(int fildes);
- •Int fildes;
- •1.Взаимодействие драйверов с программной и аппаратной средой
- •10.3.4 Опрос терминала
- •2. Основы tcp/ip
- •2.1. Модуль ip создает единую логическую сеть
- •-----------------------------¬ --------------------------------¬
- •--------------------------------------------¬
- •Ip-сеть "development" ip-сеть "accounting"
- •223.1.2.1 Alpha
- •Int socket(int domain, int type, int protocol)
- •11.20. Процесс создает в домене "unix system" гнездо потокового
Дата
печати 16.11.2003 11:28 PMстр.
Подсистема управления вводом-выводом
Подсистема управления вводом-выводом позволяет процессам поддерживать связь с периферийными устройствами, такими как накопители на магнитных дисках, терминалы, принтеры и сети, с одной стороны, и с модулями ядра, которые управляют устройствами и именуются драйверами устройств, с другой. Между драйверами устройств и типами устройств обычно существует однозначное соответствие: в системе может быть один дисковый драйвер для управления всеми дисководами, и один терминальный драйвер для управления всеми терминалами. Если в системе имеются однотипные устройства, полученные от разных изготовителей, в этом случае можно трактовать однотипные устройства как устройства двух различных типов и иметь для них два отдельных драйвера, поскольку таким устройствам для выполнения одних и тех же операций могут потребоваться разные последовательности команд. Один драйвер управляет множеством физических устройств данного типа. Например, один терминальный драйвер может управлять всеми терминалами, подключенными к системе. Драйвер различает устройства, которыми управляет: Выходные данные, предназначенные для одного терминала, не должны быть посланы на другой.
Для выполнения базовых операций предназначены следующие функции:
|
creat() |
создание файла, |
|
open() |
открытие файла, |
|
close() |
закрытие файла, |
|
read() |
чтение файла, |
|
write() |
запись в файл. |
|
ioctl() |
управление файлом, |
|
dup(), dup2() |
дублирование дескриптора файла, |
read
creat - создание файла
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
Int creat(const char *path, mode_t mode);
|
path |
(маршрутное) имя файла; |
|
mode |
режим доступа к файлу. |
Вызов функции
creat(path, mode);
эквивалентен вызову
open(path, O_WRONLY | O_CREAT | O_TRUNC, mode);
open - открытие файла
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
Int open(const char *path, int oflag, ...);
|
O_RDONLY |
открыть файл только для чтения; |
|
O_WRONLY |
открыть файл только для записи; |
|
O_RDWR |
открыть файл для чтения и записи.. |
Следующие флаги могут присутствовать в значении oflag в любой комбинации.
|
O_CREAT |
создание файла; |
|
O_NDELAY |
если файл является специальным файлом устройства, функция возвращает управление, не дожидаясь ответного сигнала; |
dup
dup(fildes)
Int fildes;
Функция dup создает копию указанного дескриптора файла, возвращая дескриптор с наименьшим номером из имеющихся в системе. Старый и новый дескрипторы используют один и тот же указатель на файл, а также и другие совпадающие атрибуты.
close
#include <unistd.h>
Int close(int fildes);
Функция close закрывает дескриптор файла, полученный в результате выполнения функций open, creat, dup, pipe или унаследованный от функции fork. Действия при закрытии файлов соответствующих физическим устройствам определяются драйверами устройств. В силу этого здесь приводятся лишь допустимые действия драйверов устройств при закрытии файла. При наличии в очереди к устройству необработанных заявок на ввод/вывод драйвер может попытаться их отменить. Те заявки, которые не были отменены, будут обрабатываться так, как если бы функция close() еще не вызывалась. При этом функция close() не дожидается исполнения этих заявок.
read(fildes,buf,size)