Андрей Робачевский - Операционная система UNIX

Здесь есть возможность читать онлайн «Андрей Робачевский - Операционная система UNIX» весь текст электронной книги совершенно бесплатно (целиком полную версию без сокращений). В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Город: Санкт-Петербург, Год выпуска: 1997, ISBN: 1997, Издательство: BHV - Санкт-Петербург, Жанр: ОС и Сети, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

Операционная система UNIX: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «Операционная система UNIX»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

Книга посвящена семейству операционных систем UNIX и содержит информацию о принципах организации, идеологии и архитектуре, объединяющих различные версии этой операционной системы.
В книге рассматриваются: архитектура ядра UNIX (подсистемы ввода/вывода, управления памятью и процессами, а также файловая подсистема), программный интерфейс UNIX (системные вызовы и основные библиотечные функции), пользовательская среда (командный интерпретатор shell, основные команды и утилиты) и сетевая поддержка в UNIX (протоколов семейства TCP/IP, архитектура сетевой подсистемы, программные интерфейсы сокетов и TLI).
Для широкого круга пользователей

Операционная система UNIX — читать онлайн бесплатно полную книгу (весь текст) целиком

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «Операционная система UNIX», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Функция возвращает дескриптор объекта-очереди, либо -1 в случае ошибки. Подобно файловому дескриптору, этот идентификатор используется процессом для работы с очередью сообщений. В частности, процесс может:

□ Помещать в очередь сообщения с помощью функции msgsnd(2) ;

□ Получать сообщения определенного типа из очереди с помощью функции msgrcv(2) ;

□ Управлять сообщениями с помощью функции msgctl(2) .

Перечисленные системные вызовы манипулирования сообщениями имеют следующий вид:

#include

#include

#include

int msgsnd(int msqid, const void *msgp,

size_t msgsz, int msgflg);

int msgrcv(int msqid, void *msgp,

size_t msgsz, long msgtyp, int msgflg);

Здесь msgidявляется дескриптором объекта, полученного в результате вызова msgget(2) . Параметр msgtypуказывает на буфер, содержащий тип сообщения и его данные, размер которого равен msgszбайт. Буфер имеет следующие поля:

long msgtype тип сообщения
char msgtext[] данные сообщения

Аргумент msgtypуказывает на тип сообщения и используется для их выборочного получения. Если msgtypравен 0, функция msgrcv(2) получит первое сообщение из очереди. Если величина msgtypвыше 0, будет получено первое сообщение указанного типа. Если msgtypменьше 0, функция msgrcv(2) получит сообщение с минимальным значением типа, меньше или равного абсолютному значению msgtyp.

Очереди сообщений обладают весьма полезным свойством — в одной очереди можно мультиплексировать сообщения от различных процессов. Для демультиплексирования используется атрибут msgtype, на основании которого любой процесс может фильтровать сообщения с помощью функции msgrcv(2) как это было показано выше.

Рассмотрим типичную ситуацию взаимодействия процессов, когда серверный процесс обменивается данными с несколькими клиентами. Свойство мультиплексирования позволяет использовать для такого обмена одну очередь сообщений. Для этого сообщениям, направляемым от любого из клиентов серверу, будем присваивать значение типа, скажем, равным 1. Если в теле сообщения клиент каким-либо образом идентифицирует себя (например, передает свой PID), то сервер сможет передать сообщение конкретному клиенту, присваивая тип сообщения равным этому идентификатору.

Поскольку функция msgrcv(2) позволяет принимать сообщения определенного типа (типов), сервер будет принимать сообщения с типом 1, а клиенты — сообщения с типами, равными идентификаторам их процессов. Схема такого взаимодействия представлена на рис. 3.19.

Рис 319 Мультиплексирование сообщений в одной очереди Атрибут msgtypeтакже - фото 44

Рис. 3.19. Мультиплексирование сообщений в одной очереди

Атрибут msgtypeтакже можно использовать для изменения порядка извлечения сообщений из очереди. Стандартный порядок получения сообщений аналогичен принципу FIFO — сообщения получаются в порядке их записи. Однако используя тип, например, для назначения приоритета сообщений, этот порядок легко изменить.

Пример приложения "Здравствуй, Мир!", использующего сообщения:

Файл описания mesg.h

#define MAXBUFF 80

#define PERM 0666

/* Определим структуру нашего сообщения. Она может отличаться

от структуры msgbuf, но должна содержать поле mtype. В данном

случае структура сообщения состоит из буфера обмена */

typedef struct our msgbuf {

long mtype;

char buff[MAXBUFF];

} Message;

Сервер:

#include

#include

#include "mesg.h"

main() {

/* Структура нашего сообщения (может отличаться от

структуры msgbuf) */

Message message;

key_t key;

int msgid, length, n;

/* Получим ключ */

if ((key = ftok("server", 'A')) < 0) {

printf("Невозможно получить ключ\n");

exit(1);

}

/* Тип принимаемых сообщений */

message.mt_type = 1L;

/* Создадим очередь сообщений */

if ((msgid = msgget(key, РЕRМ | IPC_CREAT)) < 0) {

printf("Невозможно создать очередь\n");

exit(1);

}

/* Прочитаем сообщение */

n =

msgrcv(msgid, &message, sizeof(message), message.mtype, 0);

/* Если сообщение поступило, выведем его содержимое

на терминал */

if (n > 0) {

if (write(1, message.buff, n) != n) {

printf("Ошибка вывода\n");

exit(1);

}

} else {

printf("Ошибка чтения сообщения\n");

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Похожие книги на «Операционная система UNIX»

Представляем Вашему вниманию похожие книги на «Операционная система UNIX» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Отзывы о книге «Операционная система UNIX»

Обсуждение, отзывы о книге «Операционная система UNIX» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x