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)