Le named pipe, come TCP, non hanno grossi problemi di sincronizzazioni e
quindi l'applicazione è di per se molto semplice.
Schematicamente,
Server
Il server svolge le seguenti funzioni:
crea e apre una master pipe e si pone in attesa leggendo da
questa
appena ha letto qualcosa cerca di estrare da quanto ha letto (una
stringa della forma ``PID # comando # '', spazi a piacere)
le informazioni sul PID del client che ha richiesto il servizio e il
servizio (comando) richiesto;
una volta che ha ottenunto PID e comando esegue una fork() e lascia
gestire al figlio la comunicazione con il client, rimettendosi ad
ascoltare dalla master pipe; il figlio quindi
cerca di aprire la pipe del client (il cui nome file è
concordato tra client e server, al server basta sapere il
PID per determinare il nomefile corretto), se ci riesce ci
associa STDOUT.
esegue il comando con exec() (o fa altro se è errato) e quindi
invia il comando al client
Client
Il client svolge le seguenti funzioni:
crea la sua pipe privata
apre la master pipe e ci scrive il comando (con la sintassi vista
sopra
apre in lettura la sua pipe privata e si pone in ascolto, copiando su
STDOUT tutto quello che arriva
Ritorna alla pagina del corso di Reti di Calcolatori