====== Esercitazione 6 ====== ===== Esercizio 1 ===== Scrivere un programma, utilizzando chiamate di sistema, che implementi l'equivalente del comando Unix ''cp''. Il programma deve accettare 3 argomenti come segue: mycp_sc filein fileout [buffersize] L'argomento 'buffersize' e' la dimensione del buffer da utilizzare per le letture e scritture con le SC ''read'' e ''write'' (se non specificato assegnare un valore di default, es. 256bytes): Realizzare quindi lo stesso programma, utilizzando le chiamate di libreria ''fread'' ed ''fwrite''. Chiamiamo questa seconda versione 'mycp_std'. Confrontare le prestazioni (usando il comando ''time'') del programma 'mycp_sc' e 'mycp_std' al variare del parametro 'buffersize' (provare un po' di casi: 1 4 8 16 32 ..... 8192). Che cosa si nota ?\\ ** Opzionale (homework) **: scrivere uno script bash che lanciato da una regola del makefile esegue mycp_sc e mycp_std scrivendo i risultati in due file separati. Plottare i dati dello 'user' e 'sys' time con ''gnuplot''. ===== Esercizio 2 ===== Scrivere un programma C che dati come argomenti una lista di file o directories stampa per ogni argomento: il nome del file/directory, il numero dell'inodo corrispondente, 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 del file ed il timestamp 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 3 ===== Scrivere un programma C chiamato 'lsdir' che, dato come argomento un nome di directory, visita ricorsivamente tutto il sottoalbero di directory che ha come radice la directory passata come argomento. Per ogni directory, il programma deve stampare sullo standard output le informazioni sui file nel seguente formato: Directory: file1 size permessi file2 size permessi ------------------ Directory: file3 size permessi file4 size permessi ------------------ dove la directory 'nomedir1' contiene i file 'file1' e 'file2' e la directory 'nomedir2'. Durante la visita dell'albero di directory non cosiderare le directory '.' e '..'. ===== Esercizio 4 ===== Scrivere un programma C che appena attivato va immediatamente in background, attende per X secondi (eseguendo il programma ''/bin/sleep'') dove X e' l'argomento del programma e poi stampa il pid, il pid del padre e quindi termina. ===== Esercizio 5 ===== Un processo //zombie// รจ un processo terminato ma che ancora possiede delle risorse ('pid' e PCB) che servono al processo padre per leggere lo exit status del processo figlio. 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 bash ''ps -A -ostat,pid,ppid | grep Z''.