Ваша проблема в том, что вы не проверяете никаких возвращаемых значений.Каждый вызов функции, который возвращает что-то, должен быть проверен и обработан.В частности, вы не проверяете возвращаемое значение этого:
ftest=fopen(event->name, "rb"); //segmentation fault
, если оно возвращает ноль (например, потому что event->name
содержит имя файла, а не полный путь и вы не работаете в каталоге, который вы отслеживаете),вы получите сообщение об ошибке.
Вы также не проверяете этот
wd = inotify_add_watch(fd, "/home/joe/Documents", IN_CREATE);
и, возможно, другие.
Другая проблема заключается в том, что вы печатаете дескриптор файла в виде строки.здесь:
printf (" %s\n", ftest);
Также, чтобы получить полезную информацию в отладчике и в valgrind, вам нужно собрать с отладочной информацией (gcc -g)