Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
msgrcv funktioniert nicht auf allen Rechnern :(

 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Programmieren - C
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
ThorstenR
Gast





BeitragVerfasst am: 08. Aug 2007 14:02   Titel: msgrcv funktioniert nicht auf allen Rechnern :(

Hallo!

Ich habe zwei Programme geschrieben. Das eine wartet auf Daten in einer Message Queue, die das andere Programm in diese sendet.

Auf meinen drei PCs (3x Kubuntu 7.04) funktioniert das alles super.
Auf anderen PCs (1x Debian Etch und 2x Kubuntu 7.04) jedoch steigt das Empfangsprogramm sofort mit der folgenden Meldung aus, sobald eine Nachricht in die Message Queue geschrieben wird:

main: Fehler bei msgrcv: : Invalid argument

Ich kann das nicht nachvollziehen. Problem ist, ich soll das Programm am Freitag vorführen und dann muss es auf fremden Rechnern laufen. Sad

Die Code auf der Empfängerseite sieht so aus:

Code:

struct MainQueue
{
   long int   lMsgType;   /*!< Typ der Nachricht */
   int        iStatus;   
   char      cFileIN[1024];   
   int      iCodec;      
   int        iPackageSize;   
   int        iPort;      
   char      cIP[255];   
   int        iInterval;   
   int      iThreads;   
   long      lOffset;   
} stMainQueue;

...

msqid = msgget(12340815, IPC_CREAT | 0666);
if ( msgrcv(msqid, (struct msgbuf *)&stMainQueue, sizeof(stMainQueue)-sizeof(long int), 10, 0) == -1)
{
   perror("main: Fehler bei msgrcv"); /* Fehler */
   msgctl(msqid, IPC_RMID, NULL);
   exit(EXIT_FAILURE);
}
...


Der Code auf der Senderseite:

Code:

...
msgID = msgget(12340815, IPC_CREAT | 0666);
msgsnd(msgID, &dataMsg, sizeof(dataMsg)-sizeof(long int), 0);
...


Das struct dataMsg ist das gleiche wie oben das stMainQueue.

Wieso funltioniert der Code auf meinen privaten Rechnern, auf anderen aber nicht?
Vor allem kann ich mit "Invalid argument" nicht viel anfangen. Sad

Gruß
Thorsten
 

ThorstenR
Gast





BeitragVerfasst am: 08. Aug 2007 14:10   Titel:

NACHTRAG:

Der Fehler tritt wohl nur dann auf, wenn beide Programme als root laufen.
Das Empfangsprogramm muss auf jeden Fall asl root laufen da es Schedulingprioritäten ändert.

Gibt es dafür einen Grund? Also warum darf das die Nachricht sendende Programm nicht als root laufen?

Gruß
Thorsten
 

Janka



Anmeldungsdatum: 11.02.2006
Beiträge: 3569

BeitragVerfasst am: 08. Aug 2007 21:36   Titel:

In der Manpage zu msgrecv steht drin:
Code:

EINVAL     Invalid msqid value, or non-positive mtype value, or invalid msgsz value (less than 0 or greater than the system value MSGMAX).

Du prüfst den Rückgabewert von msqid aus dem msgget davor nicht. Was macht dich so sicher, dass dieser Aufruf nicht fehlschlägt?

Janka
_________________
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.
 
Benutzer-Profile anzeigen Private Nachricht senden

Beiträge vom vorherigen Thema anzeigen:   
     Pro-Linux Foren-Übersicht -> Programmieren - C Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehen Sie zu:  

Powered by phpBB © phpBB Group
pro_linux Theme © 2004 by Mandaxy