Функция mq_setattr
Функция mq_setattr
В листинге 5.23 приведен текст функции mq_setattr, которая устанавливает значение атрибутов очереди.
Считывание текущих атрибутов
22-27 Если третий аргумент представляет собой ненулевой указатель, мы возвращаем предыдущее значение атрибутов перед внесением каких-либо изменений.
Изменение mq_flags
28-31 Единственный атрибут, который можно менять с помощью нашей функции, — mq_flags, хранящийся в структуре mq_infо.
Листинг 5.23. Функция mq_setattr
//my_pxmsg_mniap/mq_setattr.с
1 #include "unpipc.h"
2 #include "mqueue.h"
3 int
4 mymq_setattr(mymqd_t mqd. const struct mymq_attr *mqstat,
5 struct mymq attr *omqstat)
6 {
7 int n;
8 struct mymq_hdr *mqhdr;
9 struct mymq_attr *attr;
10 struct mymq_info *mqinfo;
11 mqinfo = mqd;
12 if (mqinfo->mqi_magic != MQI_MAGIC) {
13 errno = EBADF;
14 return(-1);
15 }
16 mqhdr = mqinfo->mqi_hdr;
17 attr = &mqhdr->mqh_attr;
18 if ((n = pthread_mutex_lock(&mqhdr->mqh_lock)) ! = 0) {
19 errno = n;
20 return(-1);
21 }
22 if (omqstat != NULL) {
23 omqstat->mq_flags = mqinfo->mqi_flags; /* исходные атрибуты */
24 omqstat->mq_maxmsg = attr->mq_maxmsg;
25 omqstat->mq_msgsize = attr->mq_msgsize;
26 omqstat->mq_curmsgs = attr->mq_curmsgs; /* текущий статус */
27 }
28 if (mqstat->mq_flags & O_NONBLOCK)
29 mqinfo->mqi flags |= O_NONBLOCK;
30 else
31 mqinfo->ntqi_flags &= ~O_NONBLOCK;
32 pthread_mutex_unlock(&mqhdr->mqh_lock);
33 return(0);
34 }
Данный текст является ознакомительным фрагментом.