Inotify监视文件通知两次,即使文件被修改一次

时间:2016-04-20 08:34:38

标签: c linux-kernel filesystems inotify

我正在使用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 );
}

0 个答案:

没有答案