Esercizio 1
Scrivere un programma in C che:
- Il padre
- Crea un processo figlio.
- Riceve dal figlio una sequenza di stringhe che visualizza.
- Termina quando il figlio ha terminato la sequenza.
- Il figlio
- Apre un file di testo
- Legge il file una riga per volta
- Invia la riga al padre.
- Termina quando non vi sono più caratteri da leggere dal file.
- Padre e figlio comunicano attraverso una pipe.
Esercizio 2
Scrivere un programma in C in cui:
- Il padre
- Crea due processi figli.
- Attende la terminazione di entrambi i processi figli, F0, F1.
- Il figlio Fi:
- Crea due processi figli, un lettore Li ed uno scrittore Si.
- Il processo Si:
- Apre un file di testo
- Legge il file una riga per volta
- Invia al processo lettore L1-i la riga letta.
- Termina quando non vi sono più caratteri da leggere dal file.
- Il processo lettore Li:
- Legge stringhe dal canale di comunicazione e le scrive in un file.
Lettori e scrittori comunicano attraverso pipe.
Esercizio 3
Scrivere due programmi in C in cui:
- Il primo programma:
- Riceve in input una stringa x;
- Redirige lo standard output su una fifo;
- Utilizzando una system call della famiglia exec Esegue il comando “cat x”.
- Il secondo programma:
- Legge le stringhe dalla fifo e visualizza il numero totale di caratteri che le compongono.
Esercizio 4
Scrivere un programma in cui:
- Il master thread
- Riceve su riga di comando due interi a e b.
- Crea un thread passando come parametri
- La stringa “Thread 1″
- L’intero a
- Crea un thread passando come parametri
- La stringa “Thread 2″
- L’intero b
- Attende la terminazione di entrambi I thread.
- Visualizza un messaggio e termina.
- I thread
- Stampano a video la stringa e l’intero passati come parametri e terminano.
Esercizio 5
Scrivere un programma in cui:
- Il master thread
- Crea due thread;
- Attende la terminazione di entrambi I thread;
- Visualizza un messaggio e termina.
- Il thread 1
- apre il file text1.txt;
- Legge il file una riga per volta e stampa la stringa a video.
- Il thread 2
- apre il file text2.txt;
- Legge il file una riga per volta e stampa la stringa a video.
Esercizio 6
Scrivere una applicazione client/server in cui
- Il client è identificato dal proprio pid.
- Invia al server uno dei seguenti comandi:
- LIST: Richiede l’elenco dei client connessi.
- SEND x: Invia a tutti I client connesi la stringa x.
- EXIT: Termina il client.
- KILL: Genera la terminazione del server.
- Il server è una applicazione multi-thread in cui:
- Ogni client viene gestito da un thread diverso.
- Tutte le comunicazioni vengono gestite dal master thread:
- LIST: Il master thread invia al thread associato al client che ne ha fatto richiesta la lista dei pid dei client associati.
- SEND x: Il master thread comunica a tutti I thread attivi la stringa x.
- Quando un thread riceve KILL provoca la terminazione del server.
- Per evitare problemi di sincronizzazione, per ogni thread esiste un’area di memoria utilizzata esclusivamente per la comunicazione tra il thread ed il master thread.
Client e server comunicano attraverso socket TCP.