Ricezione del messaggio:
stampo a video il messaggio appena ricevuto (qui è dove NON stampa il messaggio):codice:int ricezione(int sc, message_t* msg){ //Controllo parametri omesso /*Prima read, leggerò un solo char ottenendo il tipo del messaggio*/ letti = read(sc, &msg->type, sizeof(char) ); if( (letti == -1) || (letti == 0) || (letti < sizeof(char)) ){ perror("Read type"); return -1; } /*Seconda read, leggerò un int64_t ottenendo la lunghezza del messaggio*/ int letti_length = 0; letti_length = read(sc, &msg->length, sizeof(int64_t) ); if( (letti_length == -1) || (letti_length == 0) || (letti_length < sizeof(int64_t)) ){ perror("Read length"); return -1; } letti += letti_length; /*Terza read, leggerò msg->length caratteri ottenendo il buffer del messaggio*/ int letti_buf = 0; while( (letti_buf += read(sc, &msg->buffer, msg->length) ) < msg->length){ if( (letti_buf == -1) || (letti_buf == 0) ){ perror("Read buffer"); return -1; } } return (letti+letti_buf); }
Invio il medesimo messaggio appena ricevuto in questo modo (msgr è un messaggio di risposta nel quale copio il messaggio appena ricevuto):codice:void printMessage(message_t * msg) { if ( msg->length == 0 ) { printf("%c : <void>\n", msg->type); return; } printf("%c : %s\n", msg->type,msg->buffer); }
Il messaggio appena inviato verrà stampato CORRETTAMENTE dall'altro processo con questa funzione:codice:msgr.type = MSG_QUERY; strcpy(msgr.buffer,"server: "); if (msg.length > 0) strcat(msgr.buffer,msg.buffer); msgr.length = strlen(msgr.buffer) +1;
codice:printMessage(&msg);

Rispondi quotando