Code di messaggi C, probleminoino
Ciao ragazzi, vi posto tutto il codice del mio programmino (in realtà devo realizzarne un più corposo, questo ve l'ho fatto di esempio).
Il mio problema è molto semplice, quando mando con una msgsnd un messaggio (da cliente a servitore o il contrario) la msgrcv lo riceve correttamente ma, quando lo mando in stampa, scopro che l'int del messaggio (m.num o l.num) è sballato. Nel senso, se invio un messaggio con
tipo = RICH
mess = "Ciao!"
num = 123;
ricevo, a quanto pare
tipo = RICH
mess = "Ciao!"
num = 98979846; (un numero casuale)
secondo voi? ho pensato che sia un problema di puntatori, ma non capisco dove possa essere.
Codice:
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/msg.h>
#include<sys/types.h>
#include <sys/ipc.h>
#include<sys/wait.h>
#include "fileheader.h"
typedef struct msg{
long tipo;
char mess[30];
int num;
} messaggio;
main(){
printf("\n.....:SERVITORE:.....\n");
int key = MYKEY;
int ric,inv,cod,padre,w8,i;
int grande = sizeof(int)+sizeof(char[20]);
char comando[30];
sprintf(comando,"./cliente&");
system(comando);
cod = msgget(key,IPC_CREAT | 0666);
padre=fork();
if(padre){
w8=wait(0);
printf("\n.....:SERVITOREND:.....\n");
msgctl(cod,IPC_RMID, 0);
}
else{ messaggio l;
ric = msgrcv(cod,&l,grande,RICH,0);
if (ric!=-1) { printf("\nSERVITORE Mess Ricevuto, rispondo. (%s|%d)\n",l.mess,l.num);
messaggio m = {RISP,"Sono servitore, ciao",444};
inv = msgsnd(cod,&m,grande,0);
if (inv==-1)printf("\nSERVITORE Errore invio\n");
else printf("\nSERVITORE Messaggio inviato! (%s|%d)\n",m.mess,m.num);
}
else printf("\nSERVITORE Mess Non Ricevuto\n");
}
}
Codice:
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/msg.h>
#include<sys/types.h>
#include <sys/ipc.h>
#include<sys/wait.h>
#include "fileheader.h"
typedef struct msg{
long tipo;
char mess[20];
int num;
} messaggio;
main(){
printf("\n.....:CLIENTE:.....\n");
int key = MYKEY;
int ric,inv,cod,padre,w8,i;
int grande = sizeof(int)+sizeof(char[20]);
cod = msgget(key,IPC_CREAT | 0666);
padre=fork();
if (!padre){
messaggio m = {RICH,"Sono cliente, ciao",999};
inv = msgsnd(cod,&m,grande,0);
if (inv==-1)printf("\nCLIENTE ERRORE non inviato\n");
else printf("\nCLIENTE Messaggio inviato! (%s|%d)\n",m.mess,m.num);
messaggio l;
ric = msgrcv(cod,&l,grande,RISP,0);
if (ric==-1) printf("\nCLIENTE Messaggio non ricevuto");
else printf("\nCLIENTE Messaggio ricevuto (%s|%d)\n",l.mess,l.num);
}
else{ w8=wait(0);
printf("\n.....:CLIENTEND:.....\n");
}
}
Riferimento: Code di messaggi C, probleminoino
bon, risolto da solo. Assurdo, l'unico posto dove non ho guardato, xke convinto di aver copia-incollato tra i due file, è la struct. una ha char[20] l'altra char[30]