Vi posto questo frammento di codice e poi vi dico il problema che mi da:
codice:
if((pid = fork()) == -1)
{
perror("Nella fork()\n");
exit(errno);
}
else if (pid == 0)
{
/* siamo nel figlio. Il figlio da questo punto in poi dialoga col client */
/* creazione della pipe clientserverpid */
sprintf(clientserver,"clientserver%d%c",p,'\0');
crea_pipe(clientserver);
/* apertura della pipe clientserverpid */
fifo_fi = apri_pipe(clientserver,O_RDWR);
/* mando la risposta di ok al client per avvertire dell'avvenuta connessione sulla pipe con descrittore fifo_client (creata in precedenza)*/
sprintf(ok,"%d OK%c",getpid(),'\0');
write(fifo_client,&ok,30);
printf("OK:: %s\n",ok);
}
else /* siamo nel padre */
{ }
/* FINE WHILE */
}
/* chiudo ed elimino la pipe clientserverpid */
printf("clientserver --> %s\n",clientserver);
close(fifo_fi);
unlink(clientserver);
Allora, quando mi va a stampare clientserver --> nome della pipe mi stampa 2 volte, una delle quali una serie di caratteri incomprensibili del tipo
codice:
clientserver --> ߷�߷nn�߷_
e quando faccio l'unlink mi ritorna -1, cioe' praticamente non mi cancella niente. Perche'?
Molto probabilmente faccio confusione con la fork e nell'utilizzare il padre e il figlio nel modo giusto...
va usata una exec? E se si, in che modo?
Il padre deve fare la wait? Considerate il fatto che deve rimanere in attesa di altre richieste, quindi mi verrebbe da pensare che non occorre fare nessuna wait poiche' deve girare in bg.. o no?
Potete aiutarmi?
Grazie...