Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Системный вызов pipe

Системный вызов write

Системный вызов read

Системные вызовы dup, dup2

Системный вызов creat

Системный вызов create служит для создания обыкновенных файлов и одновременного открытия их на запись:

int creat(char* filename, mode_t mode);

Если файл, имя которого определяется в name, существовал ранее, то его содержимое будет потеряно.

Аналог: open(filename,O_CREAT|mode);

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

int new_fd = dup(int old_fd);

int new_fd = dup2(int old_fd, int new_fd);

old_fd – пользовательский дескриптор копируемого файла.

new_fd – копия дескриптора:

В случае dup – порядковый номер первой свободной записи в таблице пользовательских дескрипторов.

В случае dup2 – переданный new_fd. Если такой дескриптор уже открыт данным процессом, dup2 закроет этот файл.

Системные вызовы ввода/вывода. (20-2, 8-2)

(Здесь достаточно read и write)

Самый низкий уровень ввода/вывода в ОС Unix не предусматривает ни какой-либо буферизации, ни какого-либо сервиса, а является обращением непосредственно к ОС.

Системный вызов read выбирает блок данных фиксированного размера из файла с указанным пользовательским дескриптором fd:

ssize_t read(int fd, char* buf, int n);

buf – буфер в программе пользователя, куда должны поступать данные.

n – число, запрошенных для ввода, байт.

Системный вызов read возвращает ssize_t – количество байтов, успешно прочитанных и сохраненных в аргументе buf. Как правило оно равно n. Если файл содержит меньше n байтов, то значение ssize_t будет меньше n. Если встречается признак конца файла, то значение ssize_t = 0.

Системный вызов write помещает блок данных фиксированного размера в файл с пользовательским дескриптором fd.

buf – буфер в программе пользователя, откуда берутся данные.

n – число байт, которые необходимо записать.

Если диск файловой системы переполнился или размер файла превышает критическое значение, вернется -1.

Системный вызов close

Системный вызов close отсоединяет файл от процесса, т.е. закрывает файл. Возвращает 0 в случае успеха и -1 в случае неудачи.

Системный вызов pipe создает коммуникационный канал межпроцессной связи между двумя взаимосвязанными процессами:

int pipeHandle[2];

if (pipe(pipeHandle) == -1)

{ авария }

pipeHandle[0] – для чтения из канала.

pipeHandle[1] – для записи в канал.

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

Если у канала доступ на запись закрыл, при чтении из такого канала будет получен код ответа 0, что означает конец файла. Если у канала доступ на чтение закрыт, будет получен сигнал разорванного канала SIGPIPE.

Общепринятый метод создания каналов состоит в следующем: программа создает канал по системному вызову pipe, после чего разделяется на две копии с помощью fork. Затем в одном из полученных процессов закрывается сторона канала для чтения (pipeHandle[0]), а с другой стороны для записи (pipeHandle[1]). После чего по созданному однонаправленному каналу производиться обмен информацией.

<== предыдущая лекция | следующая лекция ==>
Системный вызов open | Экранирование
Поделиться с друзьями:


Дата добавления: 2014-01-20; Просмотров: 458; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.009 сек.