Книга: UNIX: взаимодействие процессов

Программа msgrcv

Программа msgrcv

В листинге 6.4 приведен текст программы msgrcv, считывающей сообщение из очереди. В командной строке может быть указан параметр –n, отключающий блокировку, а параметр –t может быть использован для указания типа сообщения в функции msgrcv.

2 Не существует простого способа определить максимальный размер сообщения (об этом и других ограничениях мы поговорим в разделе 6.10), поэтому мы определим свою собственную константу.

Листинг 6.4. Считывание сообщения из очереди System V

//svmsg/msgrcv.c
1  #include "unpipc.h"
2  #define MAXMSG (8192 + sizeof(long))
3  int
4  main(int argc, char **argv)
5  {
6   int c, flag, mqid;
7   long type;
8   ssize_t n;
9   struct msgbuf *buff;
10  type = flag = 0;
11  while ((c = Getopt(argc, argv, "nt:")) != –1) {
12   switch (c) {
13   case 'n':
14    flag |= IPC_NOWAIT;
15    break;
16   case 't':
17    type = atol(optarg);
18    break;
19   }
20  }
21  if (optind != argc – 1)
22   err_quit("usage: msgrcv [ –n ] [ –t type ] <pathname>");
23  mqid = Msgget(Ftok(argv[optind], 0), MSG_R);
24  buff = Malloc(MAXMSG);
25  n = Msgrcv(mqid, buff, MAXMSG, type, flag);
26  printf("read %d bytes, type = %ldn", n, buff->mtype);
27  exit(0);
28 }

Оглавление книги


Генерация: 0.956. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз