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

    Corso di reti di Calcolatori Ritorna alla pagina del corso di Reti di Calcolatori