Esercizio 1 ----------- Dato il file "primi100numeri.txt", realizzare un programma C che, tramite uso di unbuffered I/O, legge il file e ne converte il contenuto in un vettore di 100 interi. Il programma deve funzionare anche con letture multiple da file (buffer di I/O < numero caratteri nel file). Suggerimento 1: si può assumere che ogni numero abbia al più N cifre. Suggerimento 2: per convertire una stringa (char *) a intero (int) si usi: int atoi(char *). Esercizio 1.1 ------------- Ripetere esercizio 1 inserendo l'ordinamento (dal più piccolo al più grande) dei numeri convertiti e la relativa stampa a video (un numero per riga). Esercizio 2 ----------- Costruire un file system virtuale usando un file regolare come struttura dati per memorizzare informazioni. La prima versione del programma deve chiedere il contenuto da memorizzare (file) e il nome del file. Il programma deve consentire di listare (ls) il file system con stampa delle informazioni a video. Suggerimento 1: si può assumere che i dati da memorizzare siano tutte stringhe. Esercizio 2.1 ------------- Estendere l'esercizio 2, inserendo rispettivamente: i) due metadati a piacere per ogni file, ii) l'operazione di copia file, iii) l'operazione di rimozione file. Si discuta inoltre pro e contro della soluzione adottata. Quali modifiche concettuali consentono di superare i limiti evidenziati? Esercizio 3 ----------- Verificare con la metodologia sperimentale vista a lezione che, implementando la simple-cat.c con standard I/O, i risultati ottenuti sono quelli di slide 18, Lezione 6. Esercizio 4 ----------- Sia dato un file su cui è memorizzato uno storico di transazioni finanziarie. Ogni riga del file identifica una specifica transazione e contiene i seguenti campi Ogni campo è separato da un singolo carattere di tabulazione (TAB). Il candidato scriva due programmi in linguaggio C. Il primo (nell’esempio sotto di nome filtro) consente di restituire solo le righe contenenti uno specifico codice utente o codice transazione. Il secondo (nell’esempio sotto di nome sommatore) somma gli importi delle transazioni dalle righe lette da STDIN. I programmi devono poter funzionare come sotto: $ filtro IDUtente3 u < file.txt | sommatore dove IDUtente3 è il parametro che identifica lo specifico codice utente cercato. Il secondo parametro può assumere valori {u,t} e specifica dove effettuare la ricerca rispettivamente su codice utente o transazione. Il secondo parametro può essere omesso. In tal caso, la ricerca è effettuata per codice transazione. Esercizio 5 ----------- Scrivere un semplice programma C che illustra il funzionamento della system call pipe(2). Tale programma legge da STDIN e stampa su STDOUT solo le righe che iniziano con la stringa “A_VIDEO:”. Esercizio 6 ----------- Ripetere l'esercizio 5 usando popen(3).