[<<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 предоставляет приватный ключ