TAGS CLOUD
Incrementa dimensioniDecrementa dimensioni
La "vita'' dei file in un sistema GNU/Linux
Il file system è soggetto a mutamenti continui e in costante evoluzione ma il kernel sa sempre cosa accade e agisce di conseguenza. Scopri come
(pagina 3 di 10)


I backend di logsend
Può utilizzare anche inotify
L’utility logsend può utilizzare vari programmi o servizi, chiamati backend, per monitorare i file. Uno di questi è appunto inotify che va quindi selezionato durante la fase di configurazione.

Cominciamo con gli inotify-tools
Questo package raggruppa una libreria C++ che facilita la scrittura di programmi di interfacciamento delle chiamate al kernel e due utility particolarmente utili all’interno dei propri script: inotifywatch e inotifywait. Per installarle entrambe occorre eseguire i seguenti comandi:
apt-get install libinotifytools0-dev
apt-get install inotify-tools
In breve, inotifywait ferma l’elaborazione finché non si verifica un determinato evento su file o directory. Possiamo dire che è una sorta di sleep condizionato da eventi su file o directory. Diversamente, inotifywatch conta e categorizza gli eventi che in un determinato lasso di tempo hanno coinvolto uno o più file o directory. Per i lettori più esperti commentiamo, invece, il breve codice di esempio in linguaggio C (directory ~/plus/Inotify), tratto dal sito di inotify-tools (http://inotify-tools.sourceforge.net/api/inotifytools_8h. html). Vanno inclusi i file header di inotify-tools con le dichiarazioni delle funzioni di libreria:
#include
#include
Quella che segue, invece, è un’inizializzazione necessaria prima di ogni altra chiamata:
if ( !inotifytools_initialize() ) {
fprintf(stderr, “%s\n”, strerror(
inotifytools_error() ) );
return -1;
}
In pratica, tramite la funzione inotify_watch_recursively possiamo creare un punto di monitoraggio indicando il file o la directory e i relativi eventi da controllare. Gli eventi sono quelli già definiti da inotify e illustrati più avanti. Il programma in questione dovrà monitorare la directory di esecuzione del programma e intercettare tutti gli eventi possibili (IN_ALL_EVENTS):
if ( !inotifytools_watch_recursively( “.”, IN_ALL_
EVENTS ) ) {
fprintf(stderr, “%s\n”, strerror
( inotifytools_error() ) );
return -1;
}
Quello che segue, invece, è la definizione del formato per il timestamp dell’evento:
inotifytools_set_printf_timefmt( “%T” );
Ancora più avanti troviamo l’allocazione della struttura event in cui verranno salvate tutte le informazioni relative all’evento accaduto. La struttura sarà ritornata dalla funzione inotifytools_next_event, la quale mette il programma in attesa del primo evento:
struct inotify_event * event = inotifytools_next_
event( -1 );
A questo punto, appena si verifica il primo evento si stampano le informazioni ad esso relative, dopodiché il programma si mette in attesa del prossimo evento all’interno di un ciclo senza fine:
while ( event ) {
inotifytools_printf( event, “%T %w%f %e\n” );
event = inotifytools_next_event( -1 );
}
Infine, per compilare e lanciare il programma bisogna eseguire i comandi seguenti:
gcc -oin_example -linotifytools in_example.c
./in_example
Se a questo punto in un altro terminale e sotto la stessa directory di lancio del programma in_example eseguiamo il comando touch nome_ file, è possibile verificare che in_example restituisce istantaneamente il seguente risultato:
Lascia un commento
Tag: file system, linux, kernel, udev, sistema di notifica, inotify, applicazione logsend, utility incron
Condividi