====== Monitor di directory con Gio ======
Autore: **//Fabio Di Matteo//** \\ Ultima revisione: **//27/12/2015 - 19:54//** \\ \\
Di seguito vedremo come monitorare una directory con gio in C .
**main.c**
#include
// All'evento "changed" deve essere associata una funzione con i seguenti
// argomenti.
void myCallback(GFileMonitor *monitor,
GFile *file,
GFile *other_file,
GFileMonitorEvent event_type,
gpointer user_data)
{
char* myFile=g_file_get_path (file);
/*
* Elenco dei flag degli eventi dei monitor
* https://developer.gnome.org/gio/stable/GFileMonitor.html#GFileMonitorEvent
*/
if (event_type==G_FILE_MONITOR_EVENT_CREATED) g_print("File %s creato. \n", myFile);
if (event_type==G_FILE_MONITOR_EVENT_DELETED) g_print("File %s cancellato. \n", myFile);
if (event_type==G_FILE_MONITOR_EVENT_CHANGED) g_print("File %s e' cambiato. \n", myFile);
}
int main(int argc, char** argv )
{
//Ciclo principale glib
GMainLoop *loop;
loop = g_main_loop_new ( NULL , FALSE );
//Conterra' eventuali info sugli errori
GError *error=NULL;
//Directory da monitorare
GFile *mydir= g_file_new_for_path ("/home/fabio/tmp/");
//Aggancio il monitor alla directory
GFileMonitor *myMonitor=g_file_monitor_directory (mydir,
G_FILE_MONITOR_NONE,
NULL,
&error);
//Gestisco eventuali errori di lettura
if (error!=NULL)
{
g_error("Attenzione errore : %s\n",error->message);
}
//Al segnale "changed" del mio monitor(myMonitor) eseguo myCallback
g_signal_connect (myMonitor, "changed", G_CALLBACK(myCallback), NULL);
//Eseguo il ciclo principale delle Glib
g_main_loop_run (loop);
g_main_loop_unref(loop);
return 0;
}
**makefile**
CPP = gcc
OPTS = `pkg-config --cflags --libs gio-2.0`
all:
$(CPP) main.c -o main $(OPTS)
clean:
rm main