Книга: 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 Мы должны заблокировать соответствующее взаимное исключение для работы с очередью, в частности для получения атрибутов, поскольку какой-либо другой поток может в это время их изменить.
- 5.3. Функции mq_getattr и mq_setattr
- Функция mq_unlink
- Функция mq_setattr
- 2.1.3. Функция getopt_long()
- Группировка по встроенным функциям и UDF
- 19.1.1. Функция jQuery()
- Функция strcmp( )
- Управление функциями узла
- Функция программного обеспечения
- 3.2. Ключи типа key_t и функция ftok
- 9.10. Функция sctp_recvmsg
- Функция document