====== Esercitazione 7 ====== System calls (SC) che operano su directory e SC per la creazione ed attesa di terminazione di processi (fork, wait, waitpid). Per gli esercizi proposti si richiede di realizzare un Makefile. ===== Esercizio 1 ===== Scrivere un programma C che dati come argomenti una lista di file o directory stampa per ogni file: il nome del file, il numero dell'inodo, il tipo di file (-,l,d,s,...) la machera di bit di protezione (es. rw-r--r--), l'user identifier (uid), il group identifier (gid), la size ed il tempo dell'ultima modifica. Per convertire il tempo di ultima modifica in un formato stampabile usare la funzione di libreria ''ctime''. Usare ''getpwuid'' e ''getgrgid'' per convertire uid e gid nei nomi corrispondenti. ===== Esercizio 2 ===== Scrivere un programma C chiamato 'lsdir' che, dato come argomento un nome di directory, visita ricorsivamente tutto il sottoalbero di file e directory che ha come root la directory passata come argomento e stampi sullo standard output le informazioni nel seguente formato: Directory: file1 size permessi file2 size permessi ------------------ Directory: file1 size permessi file2 size permessi ------------------ Durante la visita dell'albero di directory non cosiderare le directory ''.'' e ''..''. ===== Esercizio 3 ===== Scrivere un programma che prende un intero N come argomento e crea N processi zombies. Lanciare il programma in background e visualizzare gli zombies con il comando ''ps -A -ostat,pid,ppid | grep Z''. ===== Esercizio 4 ===== Scrivere un programma C che prende come argomento un intero N>1. L'intero N rappresenta il numero di processi figli che devono essere creati in totale. I processi vanno creati come segue: il processo main stampa il suo pid e crea un figlio attendendone quindi la sua terminazione, il processo figlio a sua volta stampa il suo pid e crea un altro figlio attendendone la terminazione e cosi' via fino ad ottenere N processi figli in tutto. L'output formattato che si richiede che venga stampato sullo standard output e' il seguente: ./family 4 ---- 20894: creo un processo figlio --- 20895: creo un processo figlio -- 20896: creo un processo figlio - 20897: creo un processo figlio 20898: sono l'ultimo discendente 20898: terminato con successo - 20897: terminato con successo -- 20896: terminato con successo --- 20895: terminato con successo ---- 20894: terminato con successo