Дополнительные средства межпроцессного взоимодействия

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

Для решения этой проблеммы существует функция, которая позволяет генерировать ключи.

#include<sys/ipc.h>

key_t ftok(const char *path, int id);

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

Msgget

Semget

Shmget

Результатом выполнения функции get является идентификатор (целое число). Get подобна creat или open для работы с файлами. Но get создает уникальные идентификаторы (open может для одного файла в разных процессах создать один и тот же идентификатор).

#include <sys/ipc.h>

int msgget (key_t key, int permflags);

Вторая группа функций – функции для изменения параметров межпроцессорного взаимодействия:

msgctl

Semctl

Shmctl

Для каждого типа межпроцессорного взаимодействия существуют функции записи, чтения, изменения состояния этих объектов. При создании объекта межпроцессорного взаимодействия создается специальная структура статуса средства взаимодействия. В ней содержится вся управляющая информация, связанная с объектом. Каждый тип межпроцессорного взаимодействия содержит свою управляющую информацию. Но для всех трех типов имеется общая информация, связанная с правами доступа:

struct ipc_perm {

uid_t cuid;// идентификатор пользователя, создавшего объект

gid_t cgid;// идентификатор группы, к которой принадл. пользователь

uid_t uid;// действительный идентификатор пользователя

gid_t gid;// действительный идентификатор группы

mode_t mode;// права доступа

}

Права доступа подобны правам доступа к файлам. Значения маски на права доступа не действуют.

Механизмы межпроцессорного взаимодействия


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: