您的问题是您没有检查任何返回值。必须检查和处理每个返回内容的函数调用。特别是你没有检查这个的返回值:
ftest=fopen(event->name, "rb"); //segmentation fault
如果它返回null(例如因为 event->name 包含文件名,而不是完整路径,并且您没有在正在监视的目录中运行),您将收到错误消息。
event->name
你也没有检查这个
wd = inotify_add_watch(fd, "/home/joe/Documents", IN_CREATE);
可能还有其他人。
另一个问题是您在此处将文件句柄打印为字符串:
printf (" %s\n", ftest);
另外,为了在调试器和valgrind中获取有用的信息,您需要使用调试信息(gcc -g)进行构建