русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Очередь сообщений в Linux и Unix

Механизм очередей дает процессам возможность посылать другим процессам потоки сформатированных данных. Процесс имеет возможность послать сообщение в определенную очередь и принять сообщение из очереди. Передача данных в очереди происходит всегда сообщениями, причем каждое сообщение имеет заголовок и тело. Заголовок всегда имеет фиксированный для данной системы формат. В него обязательно входит длина сообщения, а другая информация зависит от спецификаций конкретной системы: это может быть приоритет сообщения, тип сообщения, идентификатор процесса, пославшего сообщение, и т.п. Тело сообщения интерпретируется по правилам, устанавливаемым самими процессами: отправителем и получателем. Заголовок и тело представляют собой существенно разные структуры данных и располагаются в разных местах в памяти. Собственно очередь ОС составляет из заголовков сообщений. В элементы очереди включаются указатели на тела сообщений, располагающиеся в памяти системы.

 

 

Системные вызовы Unix/Linux

ОС Unix/Linux механизм очередей сообщений обеспечивается четырьмя системными вызовами: msgget, msgctl, msgsnd, msgrcv.

Системный вызов msgget создает новую очередь или возвращает идентификатор уже существующей очереди. Как и другие средства взаимодействия между процессами, очереди в Unix/Linux (как и семафоры) не имеют внешних имен. При получении идентификатора очереди процесс пользуется числовым ключом. Гарантированно уникальную очередь можно создать с использованием ключа IPC_PRIVATE. При работе с очередью один из процессов создает очередь и получает ее идентификатор. Этот идентификатор затем передается используется процессом-создателем другим (возможно, дочерним) процессам и используется процессами для выполнения операций с очередью. Сформировать ключ также можно с помощью ftok.

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

Системные вызовы msgsnd и msgrcv выполняют посылку и прием сообщения соответственно. При посылке и приеме сообщений процессы оперируют числовым типом сообщения и текстом сообщения. Тип сообщения может выполнять роль приоритета: процесс может выбирать из очереди сообщения заданного типа или сообщения, имеющие наименьшее число типа. Если выборка по типу не применяется, сообщения выбираются по принципу FIFO.

Внимание!
В процессе отладки программы у Вас могут возникать ситуации, когда программа будет аварийно заканчиваться или прерываться Вами прежде, чем она уничтожит созданные ею очереди. Такие очереди не удаляются в системе автоматически и могут накапливаться в течение многих дней. Накопление таких "забытых" очередей может привести к тому, что будет исчерпан системный лимит на количество очередей, и очередной вызов msgget закончится с ошибкой. Для того, чтобы этого не происходило, регулярно выполняйте процедуру очистки IPC: /home/metod/rmipc. Выполняйте эту процедуру также перед каждым выходом из сеанса.

Список созданных Вами очередей Вы можете увидеть, выполнив команду: ipcs -q.

Пример выполнения приведен здесь.


Справочный материал

Избранные системные вызовы Linux/Unix. Краткое описание.

Cправочник библиотечных функция языка С: часть 1, часть 2 (кодировка кириллица ibm866).


Просмотров: 12334

Вернуться в оглавление:ОС Linux




Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Полезен материал? Поделись:

Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.