К дополнительным средствам взоимодействия относятся: передача сообщений, семафоры и разделяемая память. Програмный интерфейс для их реализации имеет значительное подобие. Для обозначения конкретного механизма используются числа называемые ключами. По смыслу ключ напоминает имя файла. Он имеет специальный тип 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;// права доступа
}
Права доступа подобны правам доступа к файлам. Значения маски на права доступа не действуют.
Механизмы межпроцессорного взаимодействия