Pro-Linux.de

Pro-Linux

Pro-Linux Diskussions- und Hilfeforum
Aktuelle Zeit: 20. Nov 2018 0:55

Alle Zeiten sind UTC+01:00




Ein neues Thema erstellen  Auf das Thema antworten  [ 3 Beiträge ] 
Autor Nachricht
BeitragVerfasst: 08. Aug 2007 14:02 
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. :(

Die Code auf der Empfängerseite sieht so aus:
Code:
struct MainQueue
{
	long int	lMsgType;	/*!< Typ der Nachricht */
	int  		iStatus;	
	char		cFileIN&#91;1024&#93;;	
	int		iCodec;		
	int  		iPackageSize;	
	int  		iPort;		
	char		cIP&#91;255&#93;;	
	int  		iInterval;	
	int		iThreads;	
	long		lOffset;	
&#125; stMainQueue;

...

msqid = msgget&#40;12340815, IPC_CREAT | 0666&#41;;
if &#40; msgrcv&#40;msqid, &#40;struct msgbuf *&#41;&stMainQueue, sizeof&#40;stMainQueue&#41;-sizeof&#40;long int&#41;, 10, 0&#41; == -1&#41;
&#123;
	perror&#40;"main&#58; Fehler bei msgrcv"&#41;; /* Fehler */
	msgctl&#40;msqid, IPC_RMID, NULL&#41;;
	exit&#40;EXIT_FAILURE&#41;;
&#125;
...
Der Code auf der Senderseite:
Code:
...
msgID = msgget&#40;12340815, IPC_CREAT | 0666&#41;;
msgsnd&#40;msgID, &dataMsg, sizeof&#40;dataMsg&#41;-sizeof&#40;long int&#41;, 0&#41;;
...
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. :(

Gruß
Thorsten


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 08. Aug 2007 14:10 
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


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 08. Aug 2007 21:36 
Offline
Benutzeravatar

Registriert: 11. Feb 2006 19:10
Beiträge: 3569
In der Manpage zu msgrecv steht drin:
Code:
EINVAL     Invalid msqid value, or non-positive mtype value, or invalid msgsz value &#40;less than 0 or greater than the system value MSGMAX&#41;.
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.


Nach oben
   
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen  Auf das Thema antworten  [ 3 Beiträge ] 

Alle Zeiten sind UTC+01:00


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.
Sie dürfen keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
Powered by phpBB® Forum Software © phpBB Limited
Deutsche Übersetzung durch phpBB.de