Re: kqueue and ordinary files

From: Dan Nelson (dnelson_at_allantgroup.com)
Date: 03/31/05

  • Next message: Peter Jeremy: "Re: the best form to wait the finish of execution of a child..."
    Date: Thu, 31 Mar 2005 01:32:13 -0600
    To: Matthew Luckie <mjl@luckie.org.nz>
    
    

    In the last episode (Mar 31), Matthew Luckie said:
    > Does kqueue signal EOF on an ordinary file when there is nothing left
    > to read?
    >
    > The code at http://www.wand.net.nz/~mjl12/kqfile.c.txt
    >
    > cc -Wall -o kqfile kqfile.c
    > ./kqfile kqueue.c
    >
    > doesn't ever get EOF notification as far as i can tell. as in, it
    > isn't signaled in kevent.flags, nor does kqueue signal the file is
    > ready for reading and then read(2) return 0.
    >
    > ident 3 filter 0xffffffff flags 0x0001 fflags 0x0000 data 128
    > read 128 bytes
    >
    > how should i detect that the file no longer has anything left to read
    > with kqueue? at the moment I use select but would like to use kqueue
    > where available.

    You can get it indirectly by examining the data field. You can see
    that the call just before the final kqueue returns data=60, so if your
    read call returns 60, you're done. The current behaviour is useful for
    things like tail or syslog watchers, so that they get an EVFILT_READ
    event when the file grows. They may be better off registering an
    EVFILT_VNODE/NOTE_EXTEND event though, so you could make a case for
    returning EV_EOF on EVFILT_READ instead of blocking.

    -- 
    	Dan Nelson
    	dnelson@allantgroup.com
    _______________________________________________
    freebsd-hackers@freebsd.org mailing list
    http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
    To unsubscribe, send any mail to "freebsd-hackers-unsubscribe@freebsd.org"
    

  • Next message: Peter Jeremy: "Re: the best form to wait the finish of execution of a child..."