Книга: UNIX: взаимодействие процессов
6.2. Функция msgget
6.2. Функция msgget
Создать новую очередь сообщений или получить доступ к существующей можно с помощью функции msgget:
#include <sys/msg.h>
int msgget(key_t key, int oflag);
/* Возвращает неотрицательный идентификатор в случае успешного завершения, –1 в случае ошибки */
Возвращаемое значение представляет собой целочисленный идентификатор, используемый тремя другими функциями msg для обращения к данной очереди. Идентификатор вычисляется на основе указанного ключа, который может быть получен с помощью функции ftok или может представлять собой константу IPC_PRIVATE, как показано на рис. 3.1.
Флаг oflag представляет собой комбинацию разрешений чтения-записи, показанную в табл. 3.3. К разрешениям можно добавить флаги IPC_CREAT или IPC_CREAT | IPC_EXCL с помощью логического сложения, как уже говорилось в связи с рис. 3.2.
При создании новой очереди сообщений инициализируются следующие поля структуры msqid_ds:
? полям uid и cuid структуры msg_perm присваивается значение действующего идентификатора пользователя вызвавшего процесса, а полям gid и cgid — действующего идентификатора группы;
? разрешения чтения-записи, указанные в oflag, помещаются в msg_perm.mode;
? значения msg_qnum, msg_lspid, msg_lrpid, msg_stime и msg_rtime устанавливаются в 0;
? в msg_ctime записывается текущее время;
? в msg_qbytes помещается системное ограничение на размер очереди.
- 6.1. Введениеы
- 6.2. Функция msgget
- 6.3. Функция msgsnd
- 6.4. Функция msgrcv
- 6.5. Функция msgctl
- 6.6. Простые примеры
- 6.7. Пример программы клиент-сервер
- 6.8. Мультиплексирование сообщений
- 6.9. Использование select и poll с очередями сообщений
- 6.10. Ограничения, накладываемые на очереди сообщений
- 6.11.Резюме
- Упражнения