Strumenti Utente

Strumenti Sito


informatica:sol:laboratorio15:esercitazionia:esercitazione6

Esercitazione 6

System calls (SC) che operano su file. Per gli esercizi proposti si richiede di realizzare un Makefile.

Esercizio 1

Implementare utilizzando le chiamate di sistema open read write close l'equivalente del comando Unix cat:

 mycat file1 [fileN].

Esercizio 2

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 performance (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: 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 3

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 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
informatica/sol/laboratorio15/esercitazionia/esercitazione6.txt · Ultima modifica: 28/04/2015 alle 06:37 (10 anni fa) da Massimo Torquati

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki