E' dato un file “vocabolario.txt” che contiene una successione di strutture del seguente tipo:
struct coppia{
char italiano[30];
char inglese[30];
};
Esiste una funzione ricerca il cui prototipo è
int ricerca(const char input[], char output []);
che cerca il vocabolo input nel file “vocabolario.txt”, se lo trova restituisce il valore 1 e carica nel parametro output la traduzione inglese in caso contrario restituisce 0.
Un processo padre crea la pipe traduzione e la pipe vocaboli e un processo figlio.
ATTENZIONE: le operazioni di lettura/scrittura sulle pipe devono essere fatte usando variabili definite come vettori di 30 caratteri, è necessario quindi che il terzo parametro della read/write sia sempre 30 perché altrimenti il processo che legge non saprebbe quanti caratteri leggere.
Il figlio dovrà ciclicamente:
• leggere da tastiera un vocabolo e scriverlo nella pipe vocaboli
• leggere dalla pipe traduzione il vocabolo tradotto e visualizzarlo
Il ciclo termina quando da tastiera si inserisce la stringa “*” che verrà comunque scritta nella pipe vocaboli.
Il padre dovrà ciclicamente:
− leggere un vocabolo dalla pipe vocaboli
− ricercarlo nel file “vocabolario.txt” chiamando la funzione ricerca
− se la ricerca ha successo scrivere la traduzione nella pipe traduzione altrimenti scrivere la stringa “Non trovato” nella pipe traduzione
Il ciclo termina quando dalla pipe vocaboli viene letta la stringa “*”.
Definire un handler per il segnale SIGUSR1 che permetta di aggiungere una struct coppia nel file “vocabolario.txt” ed installarlo nel padre.