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:

Queste informazioni sono recuperabili usando le funzioni stat(), lstat() e fstat().

La sinossi del programma è:

filestat [options] [input] [output]

Dove:

Le possibili opzioni sono:

--verbose|-v
--stat|-s
--report|-r
--history|-h <filepah>
--user|-u <userId>
--group|-g <groupId>
--length|-l <min>:<max>
--noscan

La descrizione è la seguente:

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:

<path> [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:

# <path1>
<data1> <uid1> <gid1> <dim1> <perm1> <acc1> <change1> <mod1> <nlink1>
...
<data_n> <uid_n> <gid_n> <dim_n> <perm_n> <acc_n> <change_n> <mod_n> <nlink_n>
###
# <path2>
<data1> <uid1> <gid1> <dim1> <perm1> <acc1> <change1> <mod1> <nlink1>
...
<data_n> <uid_n> <gid_n> <dim_n> <perm_n> <acc_n> <change_n> <mod_n> <nlink_n>
###
...
# <pathm>
<data1> <uid1> <gid1> <dim1> <perm1> <acc1> <change1> <mod1> <nlink1>
...
<data_n> <uid_n> <gid_n> <dim_n> <perm_n> <acc_n> <change_n> <mod_n> <nlink_n>
###
###

Le informazioni associate al file/directory <path> iniziano con la riga:

# <path>

Successivamente si trovano una sequenza di righe (una per ogni analisi svolta) della forma:

<data> <uid> <gid> <dim> <perm> <acc> <change> <mod> <nlink>

Dove:

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 <host> <port> 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.