Ошибка при реализации очереди сообщений posix - «Функция не реализована» - PullRequest
2 голосов
/ 16 января 2012

Я написал этот код для создания очереди сообщений posix.Но я получаю сообщение об ошибке «Функция не реализована».

Q1.Это проблема, связанная с платформой?[Использую Ubuntu 10.10] Я где-то читал, что мне нужно пересобрать ядро, чтобы включить очереди сообщений!?

Q2.Я также читал кое-что о запуске сервера mqueue перед тем, как использовать очереди сообщений?

Может кто-нибудь объяснить, пожалуйста ...

#include <mqueue.h>     /* message queue stuff */
#include <iostream>
#include <unistd.h>     /* for getopt() */
#include <errno.h>      /* errno and perror */
#include <fcntl.h>      /* O_flags */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

using namespace std;

int main(int argc, char **argv)
{

mqd_t msgQueueDescriptor;
mq_attr attr;

char Msg[]="msg";

attr.mq_maxmsg = 10;
attr.mq_msgsize = sizeof(Msg);
attr.mq_flags = 0;

msgQueueDescriptor = mq_open("/myQueue", O_RDWR | O_CREAT, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH , attr );
cout << msgQueueDescriptor << " " << errno << " " << strerror(errno);
mq_close(msgQueueDescriptor);

return 0;
}

1 Ответ

1 голос
/ 17 января 2012

Мне кажется, я понял, в чем проблема, или, скорее, ошибка со стороны.

Это то, что я прочитал с здесь -

[В отношении mq_open ()]

Возвращает: действительный дескриптор очереди сообщений, если очередь успешно создан, или -1 (errno установлен).

Итак, я должен проверять значение для errno только , когда действительно происходит ошибка !. Но в приведенном выше коде я просто печатаю значение независимо от того, произошла ошибка или нет, и, таким образом, оно печатает сообщение об ошибке, соответствующее некоторому значению мусор , сохраненному в errno.

Так что мой код должен выглядеть примерно так -

if ((msgQueueDescriptor = mq_open("/myQueue", O_RDWR|O_CREAT, 0664 ,NULL ) == -1))
{
    cout << msgQueueDescriptor << " " << errno << " " << strerror(errno);
}
else
{
   cout << "All is well" ;
} 

Разве я сам дурачился? P

PS: Что касается очереди сообщений, включенной в Ubuntu 10.10, я проверил флаги, как указано в «n.m.», они очень активны, и теперь я могу использовать очереди сообщений. Спасибо всем вам - Ларсману, VJovic, n.m., Joachim Pileborg, jørgensen.

О моем втором вопросе

Q2. Я также читал кое-что о запуске сервера mqueue до на самом деле использовать очереди сообщений?

Я думаю, что это требование специально для QNX.

...