我正在尝试使用 inotify 来监视文件以在无限循环中进行修改。我遇到了一些问题:
1)我有一个while(1),除非我为while的每次迭代创建一个新的文件描述符和一个新的监视描述符(我想要做的是在无限循环之前打开这些描述符),否则读取不起作用,但如果其他解决方案是可以接受的,那么我可以使用它)。这是有效的版本:
while(1){
int file_descriptor = inotify_init();
if (file_descriptor < 0) {
perror("inotify_init");
}
int watch_descriptor = inotify_add_watch(file_descriptor, "/home/user/hello.cfg", IN_CLOSE_WRITE);
....
2)我尝试使用掩码IN_MODIFY,但我读到它不适用于vim,所以我改用IN_CLOSE_WRITE。问题是当我用vim修改文件时,会读取事件,但事件的掩码是IN_IGNORED(掩码0x00008000)。当我使用gedit时,有时事件的掩码是IN_IGNORED,有时是IN_CLOSE_WRITE(掩码0x0000008)。我想知道如果我正在修改文件,为什么会得到 IN_IGNORED,以及为什么事件不是 IN_CLOSE_WRITE。是否有另一种方法来监视单个文件的修改?IN_CLOSE_WRITE 是正确的掩码吗?