#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <inotifytools/inotifytools.h>
#include <inotifytools/inotify.h>
/*
* libinotifytools example program.
* Compile with gcc -linotifytools example.c
*/
char *
escape(char *t) {
char *p, *e, *escaped;
int ticks = 0;
if(t) {
for(p = t; *p; p++)
switch(*p) {
case '\'' :
case '\\' :
case '\n' :
case '\r' :
case '\t' :
ticks++;
}
e = escaped = malloc(strlen(t) + ticks + 1);
for(p = t; *p; p++) {
switch(*p) {
case '\'' :
*e = *p;
e++;
*e = *p;
break;
case '\\' :
*e = '\\';
e++;
*e = '\\';
break;
case '\n' :
*e = '\\';
e++;
*e = 'n';
break;
case '\r' :
*e = '\\';
e++;
*e = 'r';
break;
case '\t' :
*e = '\\';
e++;
*e = 't';
break;
default :
*e = *p;
}
e++;
}
} else {
e = escaped = malloc(1);
}
*e = 0;
return escaped;
}
int
main(int argc, char *argv[]) {
// initialize and watch the entire directory tree from the current working
// directory downwards for all events
char *dir = ".";
if(argc == 2)
dir = argv[1];
if (!(inotifytools_initialize() && inotifytools_watch_recursively(dir, IN_ALL_EVENTS))) {
fprintf(stderr, "%s : %s\n", dir, strerror(inotifytools_error()));
return -1;
}
struct inotify_event * event = inotifytools_next_event(-1);
char *filename, *eventname;
while(event) {
filename = escape(inotifytools_filename_from_wd(event->wd));
eventname = escape(event->len > 0 ? event->name : 0);
fprintf(stdout, "'%s' %d '%s'\n", filename, event->mask, eventname);
fflush(stdout);
free(filename);
free(eventname);
event = inotifytools_next_event(-1);
}
}
|