DIPLOMA TELEDIDATTICO NETTUNO

Prova Pratica di Sistemi Operativi

9 Novembre 2002

 

 

Esercizio 1 (10 punti)

 

Scrivere un file comandi che venga invocato con tre parametri (si esegua il controllo sui parametri):

controlla Text Dir N

 

­                     Il primo parametro ( Text ) rappresenta una stringa

­                     Il secondo parametro ( Dir ) rappresenta il nome di un direttorio già esistente (se non esiste, il comando deve accorgersene e terminare la propria esecuzione)

­                     Il terzo parametro ( N ) rappresenta un numero intero

 

Il comando esegue un controllo periodico sul direttorio Dir passato come secondo parametro. In particolare, ogni N secondi, il comando deve controllare se in Dir eiste un file che contiene la stringa di testo Text.

Il programma deve terminare non appena trova tale file (se esiste già, il programma deve terminare dopo il primo controllo, altrimenti continua a controllare ogni N secondi finché non viene creato in Dir un file contenente la stringa di testo Text).

 

Esercizio 2 (20 punti)

 

Si realizzi un programma C che, utilizzando le primitive del Sistema Operativo UNIX, abbia un'interfaccia del tipo:

 

scrivi Nomefile1 Nomefile2 C

 

Il programma scrivi prevede tre argomenti. Nomefile1 e Nomefile2 sono percorsi completi di file non ancora esistenti nel file system (se uno dei due esiste già, il programma deve terminare con un messaggio di errore). C è un carattere.

Il programma è articolato in tre processi: P0 (il padre), P1 (il figlio) e P2 (nipote di P0, figlio di P1):

·        P0 deve creare P1 e mettersi in attesa di input da standard input (tastiera). A mano a mano che riceve caratteri in input, il padre li comunica a P1.

·        P1 deve creare P2, creare il file Nomefile1 con accesso in scrittura, e mettersi in attesa dei caratteri inviati dal P0.

·        P2 deve creare il file Nomefile2 con accesso in scrittura, e mettersi in attesa dei caratteri inviati dal P1.

A mano a mano che riceve un carattere, P1 deve eseguire un test: se il carattere è uguale a C, deve scriverlo su Nomefile1, altrimenti deve comunicarlo a P2. P2 invece deve scrivere su Nomefile2 tutti i caratteri ricevuti da P1. Il programma termina quando viene chiuso lo standard input (CTRL+D) e i vari processi hanno terminato di scrivere sui rispettivi file ( attendere la terminazione dei rispettivi figli! ).