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 <gio/gio.h> // 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