[<<Previous Entry] [^^Up^^] [Next Entry>>] [Menu] [About The Guide]
 get - основные сведения

Для использования  средств IPC  достаточно знать идентификатор и иметь
соответствующие  права   доступа.  Системные   вызовы  семейства   get
возвращают идентификатор id для соответствующего средства.

Процесс, задавший  IPC_CREAT ( из <sys/ipc.h> ) в аргументе flg вызова
get, становится  создателем данного  средства. Кроме того, в слово flg
можно  включить  побитовым  ИЛИ  восьмеричное  число,  задающее  права
доступа. IPC_CREAT  аналогичен O_CREAT  для файлов.  Как и для файлов,
можно  задать   различные  права   для  хозяина,   группы   и   других
пользователей.  Это   означает,  что   данным  средством   IPC   могут
пользоваться  процессы,   неродственные   процессу-создателю.   Другие
процессы, получающие  доступ к средству, обычно устанавливают flg в 0.
Если два  процесса выполняют  get с  установленным  флагом  IPC_CREAT,
первый из  них станет создателем средства, и его uid будет записан как
cuid (uid  создателя). Второй  процесс не  получит ошибки  от get,  но
получит тот  же id,  что и  создатель. Если  процесс  хочет  устранить
возможность доступа  к уже созданному средству, в слово flg необходимо
включить IPC_EXCL  (также из  <sys/ipc.h>). IPC_EXCL  похож на O_EXCL,
используемый при  создании файла.  Кроме того, процесс может добиться,
что именно  он будет первым, исполнившим get, задержав другие процессы
или синхронизовавшись с ними другим способом.

Идентификаторы пользователя  и группы  создателя, так  же как  и права
доступа, заданные  get при создании средства, записываются в структуру
ipc_perm для  этого средства.  Поле mode этой структуры содержит права
доступа.

Для семафора,  право  чтения  разрешает  процессу  получать  состояние
семафора вызовом  semctl(2) и ожидать, пока семафор не станет нулевым.
Право изменения (записи) для семафора разрешает процессу устанавливать
или изменять значение семафора.

Для разделяемой  памяти, право чтения разрешает чтение из разделяемого
сегмента, а записи - запись в него.

Для  очередей   сообщений,  право   чтения  требуется  для  выполнения
msgrcv(2), а записи - для msgsnd(2).

Параметры настройки  системы определяют  ограничения числа средств для
всей системы  и для  каждого из  пользователей. Вызов  get, пытающийся
выйти за эти пределы, возвратит неудачу.

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

Можно также использовать ключ с нулевым значением, известный также как
приватный ключ  (private key).  Если процесс,  создающий средство IPC,
передает IPC_PRIVATE  в качестве  ключа, он  каждый раз будет получать
новый id.   Другие  процессы не  могут получить  этот id.  IPC_PRIVATE
обычно   используется   в   родительском   процессе.   id   передается
подпроцессам через  позиционный параметр exec(2) или переменную среды.
Эти подпроцессы  не выполняют  get, а  используют  id,  полученный  от
родителя.
                       get - ОСНОВНЫЕ СВЕДЕНИЯ
.    создатель задает IPC_CREAT и права доступа в параметре flg
.    создатель может дополнительно задать IPC_EXCL
.    существуют права чтения (r) и записи (w) для хозяина, группы и
других пользователей.
.    параметры настройки системы задают ограничения
.    после создания средства IPC, устанавливается взаимно однозначное
соответствие между ненулевым ключом и id
.    IPC_PRIVATE предоставляет приватный ключ