на главную | войти | регистрация | DMCA | контакты | справка | donate |      

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
А Б В Г Д Е Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Э Ю Я


моя полка | жанры | рекомендуем | рейтинг книг | рейтинг авторов | впечатления | новое | форум | сборники | читалки | авторам | добавить



Листинг 6.1.[1] Пример использования функции msgctl с командой IPC_STAT

//svmsg/ctl.с

1  #include "unpipc.h"


2  int

3  main(int argc, char **argv)

4  {

5   int msqid;

6   struct msqid_ds info;

7   struct msgbuf buf;

8   msqid = Msgget(IPC_PRIVATE, SVMSG_MODE | IPC_CREAT);

9   buf.mtype = 1;

10  buf.mtext[0] = 1;

11  Msgsnd(msqid, &buf, 1, 0);

12  Msgctl(msqid, IPC_STAT, &info);

13  printf("read-write: *03o, cbytes = %lu, qnum = %lu, qbytes = %lu\n",

14   info.msg_perm.mode & 0777, (ulong_t) info.msg_cbytes,

15   (ulong_t) info.msg_qnum, (ulong_t) info.msg_qbytes);

16  system("ipcs –q");

17  Msgctl(msqid, IPC_RMID, NULL);

18  exit(0);

19 }

Мы собираемся отправить сообщение размером 1 байт, поэтому можно просто воспользоваться стандартным определением структуры msgbuf из . Выполнение этой программы приведет к следующему результату:

solaris %ctl

read-write: 664, cbytes = 1, qnum = 1, qbytes = 4096

IPC status from as of MOn Oct 20 15:36:49 1997

T ID   Key      MODE       OWNER    GROUP

Message Queues:

q 1150 00000000 –rw-rw-r-- rstevens other1

Выведенные значения соответствуют ожидаемым. Нулевое значение ключа обычно соответствует IPC_PRIVATE, как мы отмечали в разделе 3.2. В этой системе на очередь сообщений накладывается ограничение по объему в 4096 байт. Поскольку мы записали сообщение с 1 байтом данных и msg_cbytes имеет значение 1, это ограничение накладывается на объем полезных данных и не включает тип сообщения (long), указываемый для каждого сообщения.


Пример | UNIX: взаимодействие процессов | 6.6. Простые примеры