Esercitazione 7
Per leggere/scrivere i file usare le SC lezione. Includere SEMPRE la gestione degli errori.
Esercizio 4. (fuzzy_tail) Realizzare il comando fuzzy_tail
fuzzy_tail NUM file
che stampa gli ultimi NUM caratteri di file sullo standard output. (Suggerimento: usare lseek...)
Monitorare le chiamate di sistema effettuate con "strace fuzzy_cat" dove fuzzy_cat e' il nome dell'eseguibile.
Esercizio 5. (fuzzy_attr) Realizzare il comando fuzzy_attr
fuzzy_attr file1 fileN
che stampa gli attributi di file1 ... fileN. In particolare, devono essere stampati almeno : il numero di i-nodo, il tipo del file (regolare, directory etc.) , la maschera protezione, (rw ….) ed il tempo dell'ultimo accesso. (Suggerimento: usare stat, convertire il tempo di accesso in una stringa stampabile con la funzione di libreria ctime(), in time.h)
Esercizio 6. (compilazione separata e make) Suddividere il programma sviluppato per l'esercizio 5 su due file : uno con main() e l'altro con una funzione printattr() che stampa gli attributi di un file il cui nome è passato come parametro (possibile prototipo void printattr(char * filename) ), e scrivere il relativo makefile. Usare objdump per esplorare le varie parti dei moduli oggetto generati. Cosa contiene l'eseguibile?
Esercizio 7. (fuzzy_attr2) Estendere il comando fuzzy_attr in modo che
fuzzy_arg -d dir1 dir2 ... dirN
stampi gli attributi di tutti i file nelle directory dir1,... dirN mentre
fuzzy_arg -d
(senza parametri) stampi i file contenuti nella directory corrente
(Suggerimento: usare getcwd(), chdir() per semplificare)