Необходимо следить за файлом, в случае его изменения сообшать об этом.
Код: Выделить всё
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <string.h>
#include <sys/types.h>
#include <sys/event.h>
int
main(int argc, char * argv[])
{
int fd, kq, kv;
struct kevent ke;
fd = open(argv[1], O_RDONLY, NULL);
kq = kqueue();
EV_SET(&ke, fd, EVFILT_VNODE, EV_ADD|EV_CLEAR, NOTE_WRITE | NOTE_DELETE | NOTE_EXTEND | NOTE_ATTRIB |
NOTE_LINK | NOTE_RENAME | NOTE_REVOKE, 0, NULL);
kv = kevent(kq, &ke, 1, NULL, 0, NULL);
while(1)
{
if ( kevent(kq, NULL, 0, &ke, 1, NULL) != -1 )
{
printf("File has changed\n");
if (ke.fflags & NOTE_WRITE)
{
printf ("NOTE_WRITE\n");
};
if (ke.fflags & NOTE_DELETE)
{
printf ("NOTE_DELETE\n");
};
if (ke.fflags & NOTE_EXTEND)
{
printf ("NOTE_EXTEND\n");
};
if (ke.fflags & NOTE_ATTRIB)
{
printf ("NOTE_ATTRIB\n");
};
if (ke.fflags & NOTE_LINK)
{
printf ("NOTE_LINK\n");
};
if (ke.fflags & NOTE_RENAME)
{
printf ("NOTE_RENAME\n");
};
if (ke.fflags & NOTE_REVOKE)
{
printf ("NOTE_REVOKE\n");
};
}
}
return 0;
}
Код: Выделить всё
./a.out man_kqueue
File has changed
NOTE_RENAME
File has changed
NOTE_DELETE
Кто знает, подскажите что-же всё таки такое делает с файлом vim и какой может быть выход из этой ситуации.