Probleme mit msgsnd() und msgrcv()



  • Hallo Allerseits,
    ich habe hier ein Problem mit msgsnd() und msgrcv() Funktionen. Nicht mal simpelste Testcode will bei mir funktionieren.
    Mein Testcode sieht z.B. so aus.

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <errno.h>
    #include <limits.h>
    #include <sys/ipc.h>
    #include <sys/types.h>
    #include <sys/msg.h>
    #include <errno.h>
    
    int msq_c_id,msq_p_id;
    
    struct msgbuf {
    	long int mtype;
    	char mtext[8];
    }msgbuf;
    struct msgbuf m = {1, "message"};
    
    int main()
    {
    	int co;
    	int msq_t_id;
    	long dryrunTime,mlTime;
    	float overhTime;
    	struct timespec t1,t2,t3,t4;
    	if ( msgsnd(msq_t_id, (void *)&m, sizeof(m.mtext), 0) == -1 ) {
    		perror("Testmessage send failed");
    	}		         
    	if ( msgrcv(msq_t_id, (void *)&m, sizeof(m.mtext), 0, 0) == -1 ) {
    		perror("Testmessage rec. failed");
    	}
    }
    

    lässt sich problemlos kompilieren(ohne CFLAGs), beim Ausführen sagt der aber,

    user@odysseus:~$ ./test
    Testmessage send failed: Invalid argument
    Testmessage rec. failed: Invalid argument

    Also sowohl msgsnd als auch msgrcv können nicht aufgerufen werden. Ich seh da aber keinen Fehler im Code. Was mache ich da falsch? Tipps?

    Vielen Danke im Voraus
    Cheers
    Fritz



  • hatte vor kurzem das selbe Problem
    msgsnd/msgrcv gingen unter Linux nicht, unter Solaris einwandtutti



  • imhotep schrieb:

    hatte vor kurzem das selbe Problem
    msgsnd/msgrcv gingen unter Linux nicht, unter Solaris einwandtutti

    mmmh, hab's gerade unter Sol.9 ausprobiert, sowohl mit Forte als auch mit GCC kompiliert, ging auch nicht. gleiche Fehler....
    achja, die Funktionen liefern als Errno "EINVAL" zurück, laut Manpage bedeutet das
    "EINVAL The value of msqid is not a valid message queue identifier, or the value of mtype is less than 1; or the value of msgsz is less than 0 or greater than the system-imposed limit."
    keiner der Fehler trifft aus meiner Sicht eigentlich zu. 😕 Bin gerade richtig verwirrt, weitere Ideen?

    Vielen Dank
    Cheers
    Fritz



  • Hi,

    bei dir fehlt vermutlich der msgget() Aufruf. Ich habs vorgestern noch nach folgender Anleitung gemacht:

    http://mirror.oir.ucf.edu/LDP/linuxfocus/Deutsch/Archives/lf-2003_03-0287.pdf

    Gruß,

    Rolf


Anmelden zum Antworten