Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
didattica:triennale:so:ay_1819:progettogiugnoluglio [2018/09/12 12:55]
127.0.0.1 external edit
didattica:triennale:so:ay_1819:progettogiugnoluglio [2020/09/17 16:55] (current)
Line 1: Line 1:
-====== Specifica Progetto Appelli Giugno/​Luglio ​2018 ======+====== Specifica Progetto Appelli Giugno/​Luglio ​2019 ======
  
 === Descrizione ===  === Descrizione === 
-Sviluppare una applicazione di sistema Unix/Linux chiamata ''​swordx''​ che sia in grado di leggere ​un insieme di file (di testo) da una o più sorgenti e che produca ​in output un tile di testo contenente la lista delle parole (ordinate in ordine alfabeticoche occorrono nei file letti con la relativa occorrenzaPer parola si intende ogni sequenza costituita da soli caratteri alfanumerici ​(caratteri o lettere). Le parole non sono sensibili al maiuscolo+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 è: La sinossi del programma è:
  
-''​swordx ​[options] [inputs]''​+<​code>​ 
 +filestat ​[options] [input[output] 
 +</​code>​ 
 + 
 +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: 
 + 
 +<​code>​ 
 +--verbose|-v 
 +--stat|-s 
 +--report|-r 
 +--history|-h <​filepah>​ 
 +--user|-u <​userId>​ 
 +--group|-g <​groupId>​ 
 +--length|-l <​min>:<​max>​ 
 +--noscan 
 +</​code>​ 
 + 
 +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 <​filepah>'':​ stampa sullo standard output la cronologia delle informazioni riguardanti il file ''<​filepah>'';​ 
 +    * ''​--user|-u <​userId>'':​ stampa sullo standard output le informazioni di tutti i file di proprietà di ''<​userId>''​ 
 +    * ''​--group|-g <​groupId>'':​ stampa sullo standard output le informazioni di tutti i file di proprietà di ''<​groupId>''​ 
 +    * ''​--length|-l <​min>:<​max>'':​ stampa sullo schermo le informazioni di tutti i file di dimensione (in byte) compresa tra ''<​min>''​ e ''<​max>''​ ('':<​max>''​ indica ogni file di dimensione al più ''<​max>'',​ ''<​min>:''​ e ''<​min>''​ indicano ogni file di dimensione almeno ''<​min>''​) 
 +    * ''​--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:
  
-Dove ''​[inputs]''​ è una sequenza di file e/o directory, mentre ''​[options]''​ sono una sequenza di parametri riportati sotto.+<​code>​ 
 +<​path> ​[r] [l] 
 +</​code>​
  
-=== Dettagli ===+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.
  
-== Step 1 =+=== Formato File di Outout ===
-Il programma è in grado di trattare invocazioni del tipo:+
  
-''​swordx path/​file''​+I dati raccolti vengono salvati usando il seguente formato:
  
-Il risultato dell'​elaborazione è salvata nel file ''​swordx.out''​ salvato nella directory corrent.+<​code>​ 
 +# <​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>​ 
 +### 
 +### 
 +</​code>​
  
-**Esempio:​** Ricevuto in input il file [[https://​drive.google.com/​open?​id=1W10ctaVDlzQ-CPODa_P65TZQgQiqAFQJ|test.txt]] viene prodotto il seguente file [[https://​drive.google.com/​open?​id=1vJrNWczm2DusLJ1rFH_F0xVcEIBWi1lS|swordx.out]].+Le informazioni associate al file/directory ''<​path>''​ iniziano con la riga:
  
-== Step 2 == +<​code>​ 
-Come input può essere passata una directory:+# <​path>​ 
 +</​code>​
  
-''​swordx path/​directory''​+Successivamente si trovano una sequenza di righe (una per ogni analisi svolta) della forma:
  
-In questo caso il file ''​swordx.out''​ conterrà le statistiche ottenute elaborando tutti i file (regolari) contenuti nella directory. Nell'​analisi,​ quindi, vengono esclusi i link e le directory.+<​code>​ 
 +<​data>​ <uid> <gid> <dim> <​perm>​ <acc> <​change>​ <mod> <​nlink>​ 
 +</​code>​
  
-== Step 3 == +Dove: 
-E' ​possibile richiamare ​''​swordx'' ​passando più input:+  ​* ​''​<​data>​'' ​indica ora-data in cui sono recuperate le informazioni;​ 
 +  * ''<​uid>''​ è l'id dell'​utente proprietario del file; 
 +  * ''<​gid>''​ è l'id del gruppo del file; 
 +  * ''<​perm>''​ è la stringa con i diritti di accesso al file; 
 +  * ''<​acc>''​ data dell'​ultimo accesso; 
 +  * ''<​change>''​ data dell'​ultimo cambiamento;​ 
 +  * ''<​mod>''​ data dell'​ultima modifica dei permessi; 
 +  * ''<​nlink>''​ numero di link verso il file.
  
-''​swordx <​input1>​ <​input2>​ ... <​inputn>''​+Le informazioni terminano con la riga:
  
-Viene generato un singolo file ''​swordx.out''​ contenente le statistiche collezionate.+<​code>​ 
 +### 
 +</​code>​
  
-== Step 4 == 
-E' possibile indicare il nome del file dove devono essere salvate le statistiche collezionate:​ 
  
-''​swordx --output <file> [inputs]''​  +Il file termina con una riga
-''​swordx -o <​file>​ [inputs]'' ​+
  
-Le statistiche collezionate vengono salvate nel file ''​<file>''​.+<code> 
 +### 
 +</code>
  
-== Step 5 == +====== Addendum ​per 12 CFU ======
-E' possibile passare a ''​swordx''​ i seguenti parametri aggiuntivi:​ +
-  - ''​--help''​ e ''​-h'':​ stampa a video l'help del programma;​ +
-  - ''​--recursive''​ e ''​-r'':​ se viene passato questo argomento, nella collezione delle informazioni di una directory vengono seguite tutte le sottodirectory;​ +
-  - ''​--follow''​ e ''​-f'':​ nell'​elaborazione di una directory vengono seguiti i link; +
-  - ''​--explude <​file>''​ e ''​-e <​file>'':​ ''<​file>''​ non viene considerato nell'​elaborazione (questo parametro ha senso solo se si sta elaborando una directory);​ +
-  - ''​--alpha''​ e ''​-a'':​ vengono considerate nella statistica solo le parole contenenti caratteri alfabetici;​ +
-  - ''​--min <​num>''​ e ''​-m <​num>'':​ vengono considerate nella statistiche solo le parole con una lunghezza maggiore o uguale a ''<​num>'';​  +
-  - ''​--ignore <​file>''​ e ''​-i <​file>'':​ ''<​file>''​ è un elenco di parole (una per riga) che vengono ignorate nella statistica;​ +
-  - ''​--sortbyoccurrency''​ e ''​-s'':​ le parole vengono inserite nel file di output ordinate per numero di occorrenze.+
  
-== Step 6 == +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. 
-Consentire ​di specificare valori ​parametri di input usando espressioni regolari.  ​+  
  
 ----  ----