Vai alla Home Page About me Courseware Federica Living Library Federica Federica Podstudio Virtual Campus 3D Le Miniguide all'orientamento Gli eBook di Federica La Corte in Rete
 
I corsi di Scienze Matematiche Fisiche e Naturali
 
Il Corso Le lezioni del Corso La Cattedra
 
Materiali di approfondimento Risorse Web Il Podcast di questa lezione

Clemente Galdi » 23.Esercitazioni sui pipe e programmazione multi-threads


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.

  • Contenuti protetti da Creative Commons
  • Feed RSS
  • Condividi su FriendFeed
  • Condividi su Facebook
  • Segnala su Twitter
  • Condividi su LinkedIn
Progetto "Campus Virtuale" dell'Università degli Studi di Napoli Federico II, realizzato con il cofinanziamento dell'Unione europea. Asse V - Società dell'informazione - Obiettivo Operativo 5.1 e-Government ed e-Inclusion