Indice

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: <nomedir1>
file1     size    permessi
file2     size    permessi
------------------
Directory: <nomedir2>
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