Error-Implementierung von posix message queue - Funktion "nicht implementiert"

Schreibe ich diesen code, um ein posix message queue. Aber ich erhalte eine Fehlermeldung "Funktion nicht implementiert".

Q1. Ist es ein Plattform-bezogene Frage ? [Bin mit Ubuntu 10.10] ich habe irgendwo gelesen, dass ich wiederherstellen müssen, dass mein kernel zu aktivieren, message queues !?

Q2. Ich lese auch etwas über den Start der mqueue-server, bevor Sie tatsächlich mit message-queues ?

Kann mir bitte jemand erklären..

#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;
}
  • Nach mq_overview(7) POSIX-Nachrichten-Warteschlangen standardmäßig aktiviert sind, wenn der Bau den kernel, sondern das Ubuntu-Paketbetreuer haben könnten Sie ausgeschaltet ist.
  • Wie kann ich bestätigen, dass? Wird, dass ein Teil der release-notes von Ubuntu? Und wie kann ich es wieder einschalten falls Ihr wirklich ausgeschaltet?
  • Fände ich ubuntu wirklich seltsam, wenn Sie wirklich Sie ausgeschaltet ist. Auf fedora 15, dein Beispiel kompiliert und links erfolgreich.
  • Könnten Sie herunterladen möchten einen kernel-source-Paket über Synaptic und prüfen Sie die Konfiguration; der Fehler, den Sie haben ist sicherlich ENOSYS - also kein system nennen. Drehen MQs auf würde dann den kernel, denke ich. Ich wäre sehr überrascht, wenn MQs sind nicht im Standard-kernel unterstützt, obwohl.
  • Dies kompiliert, links und läuft auf Ubuntu 10.04.3. Überprüfen Sie Ihren kernel konfiguriert ist, die mit dem nötigen Flagge. Blick auf /boot/config*.
  • CONFIG_POSIX_MQUEUE=y CONFIG_POSIX_MQUEUE_SYSCTL=y ist das, was ich sehen kann, in dieser Datei im Zusammenhang mit mqueues. Aber es scheint, dass Sie aktiviert sind?
  • Ich bin mir sicher, dass du eben einen Fehler in deinem code, die in Ihrer Frage, aber in dem Aufruf mq_open sollten Sie die Attribut-argument als ein Zeiger (d.h. &attr im code-snippet).
  • na ja, bei einigen Distributionen nur komische Dinge wie, dass.
  • Guter Punkt. Der compiler wird nicht fangen, weil die Funktion Prototyp mit ... an Stelle des vierten Parameters.
  • Danke für den Hinweis, obwohl ich hatte das gleiche problem, wenn ich NULL.

InformationsquelleAutor Amit Tomar | 2012-01-16
Schreibe einen Kommentar