Проверьте, находится ли сообщение в очереди сообщений POSIX, не удаляя его из очереди? - PullRequest
0 голосов
/ 23 июня 2010

POSIX предоставляет способ чтения очереди сообщений с помощью функции mq_receive.Эта функция также удаляет его из очереди.Мне нужно найти способ проверить, находится ли сообщение в очереди, не удаляя его.

Ответы [ 3 ]

0 голосов
/ 02 декабря 2010

См. mq_getattr(3). Одним из атрибутов является mq_curmsgs. Приятно получить глубину очереди, в дополнение к логическому указанию, которое вы получите от epoll().

Из справочной страницы Linux:

       struct mq_attr {
           long mq_flags;       /* Flags: 0 or O_NONBLOCK */
           long mq_maxmsg;      /* Max. # of messages on queue */
           long mq_msgsize;     /* Max. message size (bytes) */
           long mq_curmsgs;     /* # of messages currently in queue */
       };
0 голосов
/ 24 июня 2013

Вы хотите добавить структуру данных mq_attr при открытии очереди сообщений, а затем получить атрибуты с помощью функции mq_getattr

int mq_getattr (mqd_t mqdes, struct mq_attr * attr);

в концепосмотрите на его член mq_curmsgs

0 голосов
/ 23 июня 2010

Из справочной страницы Linux mq_overview (7):

Опрос дескрипторов очереди сообщений


В Linux дескриптор очереди сообщений на самом деле является дескриптором файла, и его можно отслеживать с помощью выберите (2), опрос (2) или epoll (7). Это не портативный.
...