Message queue: msgsnd failed : Invalid argument
Kann jemand bitte helfen mir zu zeigen, wie was ist der Fehler in meinem Programm?
Vielen Dank im Voraus,
kingsmasher1
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <string.h>
#include <errno.h>
typedef struct msgbuf {
long mtype; /* message type, must be > 0 */
char mtext[15]; /* message data */
} msgbuf;
int main() {
key_t key;
int msqid, pid, length;
msgbuf buf;
msqid=msgget(IPC_PRIVATE,IPC_CREAT);
if(msqid==-1){
perror("msgget failed");
return;
}
else {
printf("msgget succeeded. ID:%u",msqid);
}
pid=fork();
if(pid==-1) {
perror("fork failed\n");
}
buf.mtype=1;
strcpy(buf.mtext, "This is a test message");
length=sizeof(buf.mtext);
if(msgsnd(msqid,&buf,length,0)!=0) {
perror("msgsnd failed:\n");
}
else {
printf("msgsnd succeeded\n");
}
}
Ausgabe:
msgsnd failed: Invalid argument
InformationsquelleAutor kingsmasher1 | 2011-03-07
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie nicht genug Platz in Ihrem
buf.mtext
(15 Zeichen) für"This is a test message"
(23 Zeichen plust man mehr für eine NULL-terminator).Ich würde sagen, es ist eine gute chance, dass möglicherweise beschädigen Ihre Art oder sogar einige anderen Stück von Informationen auf dem stack (wie
msqid
oderlength
oderkey
).Ob dass das eigentliche problem oder nicht, es ist immer noch Undefiniertes Verhalten und sollte korrigiert werden. Das erste, was ich tun würde, ist check durch ersetzen:
mit:
um zu sehen, ob es behebt.
Alternativ stellen
mtext
groß genug zum speichern der Daten, die Sie setzen dort.InformationsquelleAutor paxdiablo