====== Specifica Progetto Appelli Giugno/Luglio 2019 ====== === Descrizione === Sviluppare una applicazione di sistema Unix/Linux chiamata ''filestat'' che sia in grado di monitorare un insieme di file raccogliendo informazioni su: * dimensione (in byte); * permessi; * data ultimo accesso al file; * data ultima modifica del file; * data ultima modifica dei permessi; * numero di link al file; * proprietario; * gruppo. Queste informazioni sono recuperabili usando le funzioni ''stat()'', ''lstat()'' e ''fstat()''. La sinossi del programma è: filestat [options] [input] [output] Dove: * ''input'' è il file di input dove vengono definiti i parametri di esecuzione del programma, se omesso viene usato il file ''filestat.in''; * ''output'' è il file di output dove vengono collezionati i dati raccolti, se omesso viene usato il file ''filestat.db''. Le informazioni presenti nel file di output vengono __aggiornate__ ad ogni esecuzione del programma (e non soprascritte). Le possibili opzioni sono: --verbose|-v --stat|-s --report|-r --history|-h --user|-u --group|-g --length|-l : --noscan La descrizione è la seguente: * ''--verbose|-v'': durante l'esecuzione il programma mostra a video le informazioni sui file elaborati, ed i dati raccolti; * ''--stat|-s'': vengono mostrate sullo standard output le seguenti statistiche: - numero di file monitorati; - numero di link; - numero di directory; - dimensione totale; - dimensione media; - dimensione massima; - dimensione minima (in byte). * ''--report|-r'': al termine dell'esecuzione vengono mostrati sullo standard output le informazioni riguardanti numero di file elaborati, tempo di elaborazione, dimensione massima del file; * ''--history|-h '': stampa sullo standard output la cronologia delle informazioni riguardanti il file ''''; * ''--user|-u '': stampa sullo standard output le informazioni di tutti i file di proprietà di '''' * ''--group|-g '': stampa sullo standard output le informazioni di tutti i file di proprietà di '''' * ''--length|-l :'': stampa sullo schermo le informazioni di tutti i file di dimensione (in byte) compresa tra '''' e '''' ('':'' indica ogni file di dimensione al più '''', '':'' e '''' indicano ogni file di dimensione almeno '''') * ''--noscan'': se presente questa opzione non viene effettuata la raccolta dei dati, ma vengono presentati solo le informazioni presenti del file di output. === Formato File di Input === I parametri di esecuzione di un programma vengono definiti in un file di testo costituito da una sequenza di righe della seguente forma: [r] [l] Dove ''r'' indica che occorre leggere ricorsivamente i file nelle directory sottostanti (applicando le stesse opzioni) mentre ''l'' indica che i link devono essere trattati come file/directory regolari, in questo caso le informazioni collezionate fanno riferimento al file riferito dal link e non a link stesso. === Formato File di Outout === I dati raccolti vengono salvati usando il seguente formato: # ... ### # ... ### ... # ... ### ### Le informazioni associate al file/directory '''' iniziano con la riga: # Successivamente si trovano una sequenza di righe (una per ogni analisi svolta) della forma: Dove: * '''' indica ora-data in cui sono recuperate le informazioni; * '''' è l'id dell'utente proprietario del file; * '''' è l'id del gruppo del file; * '''' è la stringa con i diritti di accesso al file; * '''' data dell'ultimo accesso; * '''' data dell'ultimo cambiamento; * '''' data dell'ultima modifica dei permessi; * '''' numero di link verso il file. Le informazioni terminano con la riga: ### Il file termina con una riga ### ====== Addendum per 12 CFU ====== Gli studenti che devono sostenere il programma di Sistemi Operativi con 12CFU devono implementare anche il server ''filetatd'' che raccoglie informazioni da più client. Inoltre, il programma ''filestat'' potrà prendere come parametri aggiuntivi '' '' che identifica il server a cui inviare le informazioni. In questo caso tutte le informazioni non vengono salvate localmente ma inviate al server. Allo stesso modo le eventuali richiesta di informazioni devono essere recuperate dal server. ----