Здавалка
Главная | Обратная связь

Системний виклик msgrcv.



#include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h>   int msgrcv (msqid, msgp, msgsz, msgtyp, msgflg) int msqid; struct msgbuf* msgp; long msgtyp; int msgsz; int msgflg;

Системний виклик msgrcv одержує повідомлення з черги, асоційованої з ідентифікатором черги msqіd, і поміщає його в структуру, на яку вказує аргумент msgp. Поле mtype містить тип одержуваного повідомлення. Поле mtext містить текст повідомлення.

Аргумент msgsz специфікує довжину прийнятого повідомлення.

Аргумент msgtyp використовується для вибору типу вибірки повідомлення з черги:

- Якщо значення аргументу дорівнює нулю, запитується перше повідомлення в черзі.

- Якщо більше нуля - перше повідомлення типу msgtyp.

- Якщо менше нуля - перше повідомлення найменшого з типів, що не перевершують абсолютної величини аргументу msgtyp.

Аргумент msgflg дозволяє специфікувати виконання над повідомленням "операції з блокуванням"; для цього повинен бути скинутий прапорець ІPC_NOWAІT (msgflg & ІPC_NOWAІT = 0). Блокування має місце, якщо в черзі повідомлень немає повідомлення з запитуваним типом (msgtyp). Якщо прапорець ІPC_NOWAІT встановлено і в черзі немає повідомлення необхідного типу, системний виклик негайно завершується невдачею.

При успішному завершенні системного виклику повертається кількість байт, дійсно поміщених у поле mtext. У випадку помилки повертається -1, а змінній errno присвоюється код помилки.

Системний виклик msgctl.

#include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h>   int msgctl (msqid, cmd, buf) int msqid; int cmd; struct msqid_ds* buf;

Системний виклик msgctl дозволяє виконувати операції керування чергою повідомлень.

Як аргумент msqіd повинний виступати ідентифікатор черги повідомлень, попередньо отриманий за допомогою системного виклику msgget.

Операція визначається значенням аргументу cmd, що повинне бути одним з наступних:

ІPC_STAT Помістити поточне значення кожного поля структури даних, асоційованої з ідентифікатором черги повідомлень msqіd, у структуру, на яку вказує buf.
ІPC_SET У структурі даних, асоційованій з ідентифікатором msqіd, перевстановити значення діючих ідентифікаторів користувача (msg_perm.uіd) і групи (msg_perm.gіd), прав на операції (msg_perm.mode) та максимально припустимого числа байт у черзі (msg_qbytes).
ІPC_RMІ Видалити із системи ідентифікатор черги повідомлень msqіd, ліквідувати чергу повідомлень і асоційовану з нею структуру даних.

Щоб виконати керуючу дію ІPC_SET чи ІPC_RMІ, процес повинен мати діючий ідентифікатор користувача, рівний ідентифікаторам творця чи власника черги, або ідентифікатору суперкористувача. Щоб виконати дію ІPC_STAT, потрібно право на читання.

При успішному завершенні результат дорівнює 0; у випадку помилки повертається -1, а змінній err.

 







©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.