?
Hallo,
Irgendwie weiß ich nicht mehr weiter:
Ich hab ein Programm "Server.c", welches Nachrichten eines bestimmten Typs an eine Message Queue sendet. Im Hintergrund laufen bereits zwei andere Programme Rechner1 und Rechner2, denen die Nachrichten des Typs 1 (mtype = 1 für +/- rechnungen) oder des Typs 2 (mtype = 2 für * / rechnungen) zugesprochen sind.
D.h. Rechner1 darf nur Messages vom Typ 1 und Rechner 2 nur MEssages vom Typ 2 empfangen und verarbeiten.
Die Programme werden wie folgt aufgerufen:
./Rechner1
./Rechner2
./Server <zahl> <zahl> <rechenoperator> (zB Server 2 3 +)
Mein Problem:
Wenn ich beim nachfolgenden code abschnitt (enthalten in Rechner1.c) das printf("bist du drin...") weglasse, kommt gar keine Meldung und es erscheint einfach gar nichts. tu ich das printf("bist du..)
wieder rein kommt ganz normal die Ausgabe der Berechnung:
zB mit ./Eingabe 22 11 -
==> erscheint im Terminal von Rechner1
bist du drin ...
Rechner1: 22 - 11 = 11
ansonsten erscheint gar nichts
Hier der Codeabschnitt:
void calculate(const char* nr1, const char* nr2, int operator){//char *
int x = atoi(nr1);
int y = atoi(nr2);
int result;
char * cResult;
printf("bist du drin? %s %s \n",nr1,nr2);
if(operator == 1)
result = x + y;
else
result = x - y;
sprintf(cResult, "%d", result);
//printf("&s",cResult);
printf("Rechner1: %s - %s = %s \n",nr1,nr2,cResult);
//return cResult;
}
Hier noch die Endlosschleife zum empfangen von Nachrichten:
for(;;){
if(msgrcv(msqid,&msg, sizeof(msg),msgtyp,0) == -1){//12
perror("msgrcv1");
return EXIT_FAILURE;
}else{
calculate(msg.nr1,msg.nr2,msg.mtype);//result =
//printf("S_Rechner: %s %c %s = %s \n",msg.nr1,msg.operator,msg.nr2,result);
}
}
if (msgctl(msqid, IPC_RMID, NULL) == -1) {
perror("msgctl");
return EXIT_FAILURE;
}
Weiters kommt bei mir beim zweiten Programm Rechner2.c immer nach Ausgabe einer Rechnung ein "msgrcv: invalid argument" Fehler, obwohl es eigentlich genau gleich aufgebaut ist wie das Rechner1.c Programm - zudem kommt bei diesem Programm immer eine Ausgabe zustande - auch wenn nicht extra ein printf("bist du da d...) ausgegeben wird:
for(;;){
if(msgrcv(msqid,&msg, sizeof(msg),msgtyp,0) == -1){
perror("msgrcv2");
return EXIT_FAILURE;
}else{
calculate(msg.nr1,msg.nr2,msg.mtype);
}
}
if (msgctl(msqid, IPC_RMID, NULL) == -1) {
perror("msgctl");
return EXIT_FAILURE;
}
Hoffe ihr könnt mir helfen - danke!
lg