watching for a directory with kqueue

Markiyan Kushnir markiyan.kushnir at gmail.com
Mon Mar 5 21:23:27 UTC 2012


On 05.03.2012 20:12, Sergey Matveychuk wrote:
> Hi.
>
> I've met a problem with the subj. Could you help?
>
> I'm watching for a directory:
> EV_SET(kq_change_list, fd, EVFILT_VNODE,
> EV_ADD | EV_ENABLE | EV_ONESHOT,
> NOTE_DELETE | NOTE_WRITE | NOTE_EXTEND | NOTE_ATTRIB,
> 0, 0);
>
> When the directory changed, I read its contens with opendir, like that:
> struct kq_event kq_event[1000];
> ...
> while(1) {
> n = kevent(kq, kq_change_list, chlist_used, kq_event, 1000, NULL);
> for(i = 0; i < n; i++) {
> if(kq_event[i].fflags & NOTE_EXTEND || kq_event[i].fflags & NOTE_WRITE) {
> opendir(.....)
>
> It works when I create a few files (1-3), but when I create 10 files
> with touch(1) I see only 3-6 files with opendir. I've got only one event
> with kevent() (n=1). Looks like I should got a few events, but I did
> not. Could you give an advice how to get all created files?

Try to put some delay (~10ms) after your call to kevent().

Markiyan.

> _______________________________________________
> freebsd-hackers at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
> To unsubscribe, send any mail to "freebsd-hackers-unsubscribe at freebsd.org"



More information about the freebsd-hackers mailing list