我正在使用inotify监视文件,但是当监视文件被更改(file.xml)时遇到问题,即使修改完成一次也会发出两次通知(使用vim写入文件打开文件它并且正在关闭文件),我也看到有时它只是通知一次,在大多数时候,它通知两次,我可以得到一些关于我在代码中做错了什么的输入。
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/inotify.h>
#include <unistd.h>
#define EVENT_SIZE ( sizeof (struct inotify_event) )
#define BUF_LEN ( 1024 * ( EVENT_SIZE + 16 ) )
const char *file_path = "/home/file.xml";
int main( int argc, char **argv )
{
int length, i;
int fd;
int wd;
char buffer[BUF_LEN];
fd = inotify_init();
if ( fd < 0 ) {
perror( "inotify_init" );
}
wd = inotify_add_watch(fd,
file_path,
IN_ALL_EVENTS);
if(wd < 0) {
perror ("inotify_add_watch");
exit(EXIT_FAILURE);
}
while(1)
{
length = read( fd, buffer, BUF_LEN );
if ( length < 0 ) {
perror( "read" );
}
i = 0;
while ( i < length ) {
struct inotify_event *event = ( struct inotify_event * ) &buffer[ i ];
if ( event->mask & IN_MODIFY) {
printf( "The file %s was modified.\n", file_path );
break;
}
i += EVENT_SIZE + event->len;
}
}
( void ) inotify_rm_watch( fd, wd );
( void ) close( fd );
exit( 0 );
}