anche se per alcuni il titolo puo sembrare astruso, mi riferisco a chiamate di sistema come l'uso delle code di messaggi, le pipe, etc
stavo notando con molta arrabbiatura che alcuni miei sorgenti che utilizzano queste system call, non girano come dovrebbero. Mi spiego meglio e poi posto il codice dell'ultima applicazione che ho scritto. Si parla di scambio di messaggi tra processi (nel sorgente in esame una pipe), quindi di produttore/consumatore. Finchè passo una semplice stringa SENZA spazi nel mezzo, nessun problema, ma se inizio ad inserire spazi fra una stringa e l'altra prima di inviarla sulla pipe, subentra il problema. L'applicazione che legge i dati dalla pipe legge una "parola" per volta (con parola intendo una stringa fino allo spazio). questo è il codice:

codice:
//scambio messaggi tra processi tramite pipe
#include<stdio.h>
#include<unistd.h>

//40 byte taglia massima
void main() {
   int res, pid, status, desc[2];
   char msg[40];
   
   //creazione pipe
   res=pipe(desc);
   pid=fork();
   if(pid == 0) { //processo figlio
      res=close(desc[1]);
      while(read(desc[0], msg, 40) > 0 )
	 printf("processo figlio, letto messaggio %s\n", msg);
      close(desc[0]);
   }
   else {	//processo padre
      res=close(desc[0]); //chiusura canale lettura
      do {
	  printf("processo padre, scrivi messaggio: \n");
	 scanf("%s\n", msg);
	 write(desc[1], msg, 40);
      }while(strcmp(msg,"quit") != 0);
     
      close(desc[1]);
     wait(&status);
   }
}
Sapete dov'è il problema? perchè la stessa cosa mi capita se lo faccio con la shared memory+semafori, e le code di messaggi...