КАТЕГОРИИ: Архитектура-(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]). После чего по созданному однонаправленному каналу производиться обмен информацией.
Дата добавления: 2014-01-20; Просмотров: 489; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |