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

Функция mq_getattr

Функция mq_getattr

В листинге 5.22 приведен текст функции mq_getattr, которая возвращает текущее значение атрибутов очереди.

Листинг 5.22. Функция mq_getattr

//my_pxmsg_mmap/mq_getattr.с
1  #include "unpipc.h"
2  #include "mqueue.h"
3  int
4  mymq_getattr(mymqd_t mqd, struct mymq_attr *mqstat)
5  {
6   int n;
7   struct mymq_hdr *mqhdr;
8   struct mymq_attr *attr;
9   struct mymq_info *mqinfo;
10  mqinfo = mqd;
11  if (mqinfo->mqi_magic != MQI_MAGIC) {
12   errno = EBADF;
13   return(-1);
14  }
15  mqhdr = mqinfo->mqi_hdr;
16  attr = &mqhdr->mqh_attr;
17  if ((n = pthread_mutex_lock(&mqhdr->mqh_lock)) != 0) {
18   errno = n;
19   return (-1);
20  }
21  mqstat->mq_flags = mqinfo->mqi_flags; /* для каждого open */
22  mqstat->mq_maxmsg = attr->mq_maxmsg; /* оставшиеся три – для очереди */
23  mqstat->mq_msgsize = attr->mq_msgsize;
24  mqstat->mq_curmsgs = attr->mq_curmsgs;
25  pthread_mutex_unlock(&mqhdr->mqh_lock);
26  return(0);
27 }

Блокирование взаимного исключения

17-20 Мы должны заблокировать соответствующее взаимное исключение для работы с очередью, в частности для получения атрибутов, поскольку какой-либо другой поток может в это время их изменить.

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


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