Strumenti Utente

Strumenti Sito


lcs:lcs09:esercitazioni:esercitazione8

Esercitazione 8: Pipe

Esercizio 0: Produttore e consumatore con pipe

Scrivere un programma C che implementi un processo produttore che genera N numeri casuali, li passa ad un processo consumatore usando una pipe senza nome e poi termina. Il consumatore deve stampare ciascun numero ricevuto sullo standard output e terminare a sua volta.

Esercizio 1: who_sort_cat

Scrivere un programma C che utilizzando pipe senza nome e la duplicazione di descrittori implementa il pipeline di shell

bash:~$ who | sort | cat

per stampare la lista di utenti connessi. Ogni comando deve girare in un processo diverso.

Elaborazione: Usare wc -l al posto di cat per avere il numero di connessioni.

Esercizio 2: Dummy shell con pipelining e ridirezione

Modificare l'esercizio su dummy-shell dell'esercitazione 5 in modo da trattare anche il pipelining di comandi e la ridirezione.

Esercizio 3: Un server ed un client

Realizzare un processo server ed un processo client. I due processi intergiscono utilizzando due pipe con nome: clientserver e clientp. Il server crea la pipe clientserver (se non esiste), la apre e si mette in attesa di messaggi da parte del client. Ogni messaggio è costituito da un double. Per ogni messaggio ricevuto x, il server calcola x*x e invia il risultato su clientp. La sequenza di messaggi termina quando il figlio chiude la pipe clientserver. Le pipe devono essere rimosse dal file system alla terminazione dei due processi.

Esercizio 4: Un server e molti client

Realizzare un processo server che rimane sempre attivo in attesa di richieste da parte di un insieme (possibilmente vuoto) di processi client. Ogni client richiede al server la trasformazione di tutti i caratteri minuscoli di una stringa in caratteri maiuscoli (es tigre –>TIGRE) con un messaggio su una pipe dal nome fissato: clientserver. In questo caso i messaggi sulla pipe clientserver sono scritti da processi client diversi. Ogni client prima di inviare una richiesta crea una pipe di ascolto dal nome unico (eg. usando il PID) e codifica tale nome nel messaggio inviato al server. All sua attivazione il server crea la pipe clientserver (se non esiste), la apre e si mette in attesa di messaggi da parte dei client. Ogni messaggio è costituito da una stringa e dal nome della pipe di risposta clientpid. Per ogni messaggio ricevuto il server estrae la stringa, trasforma le minuscole in maiuscole e invia il risultato su clientpid. Il server deve rimanere sempre attivo, anche alla terminazione di tutti i processi client.
Tutte le pipe devono essere rimosse dal file system alla terminazione del processo/i che le utilizzano.

lcs/lcs09/esercitazioni/esercitazione8.txt · Ultima modifica: 21/04/2009 alle 09:15 (12 anni fa) da Susanna Pelagatti