>* Dominic Marks <[EMAIL PROTECTED]> [010502 14:29] wrote:
> > I've been looking to start using the KEvent system and I've been
> > experimenting with it. However I've been having several problems, with 
>my
> > own code as well as samples from http://www.flugsvamp.org.
>
>www.flugsvamp.org doesn't seem to resolve.

Yes, a mistake on my part. It should have been flugsvamp.com.

>
> >
> > It appears I am able to create the correct structure's and register the
> > events. However the event never returns and never responds to any 
>action.
> > For example if I use a sample which monitors the actions on a file I can
> > read from, and write to the file and it shows no sign of noticing.
> >
> > I was wondering if it's simply a mistake of my own, however the failure 
>for
> > the samples I've found has puzzled my further. I'm working on a 
>4.3-STABLE
> > machine using GCC version 2.95.3.
> >
> > Here is an example of code that I am using which doesn't seem to catch 
>any
> > events. Its a slightly modified version of read_test.c from 
>flugsvamp.com
> > which I edit so it would compile happily.
> >
> > It doesn't seem to work however.
> >
>
>[snip..]
>
> >         kq = syscall(SYS_kqueue);
> >         if (kq < 0)
> >                 err(1, "kqueue");
> >
> >  event[0].ident = fd;
> >  event[0].filter = EVFILT_READ;
> >  event[0].flags = EV_ADD | EV_ENABLE;
> >  evp[0] = &event[0];
> >  n = syscall(SYS_kevent, kq, 1, evp, 0, NULL, 0);
>
>uh, what the heck?   Why not just use the kqueue call directly like
>the manpage explains? I think you have the arguments to kevent()
>wrong.
>

I just copied the example directly here so I couldn't comment absolute on 
the decisions here. Having browsed through the man page I've edited the 
original sample, moving some of the arguments around - where these ever 
moved one way and since changed perhaps? However what I believe to be 
correct now equally refuses to respond.

Updated:
>
#include <stdio.h>
#include <fcntl.h>
#include <stdlib.h>
#include <unistd.h>
#include <aio.h>
#include <sys/errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/event.h>
#include <sys/time.h>
#include <sys/syscall.h>

main(int argc, char **argv)
{
        int fd, kq, n;
        struct kevent event[1];
        struct kevent *evp[1];
        char buffer[128];
        struct stat st;
        struct aiocb iocb;
  struct timespec ts = {0, 0};

        if (argc != 2)
                errx(1, "Usage: %s file\n", argv[0]);

        fd = open(argv[1], O_RDONLY);
        if (fd < 0)
                err(1, "open: %s\n", argv[1]);

        lseek(fd, 0, SEEK_END);

        kq = kqueue();
        if (kq < 0)
                err(1, "kqueue");

        event[0].ident = fd;
        event[0].filter = EVFILT_READ;
        event[0].flags = EV_ADD | EV_ENABLE;
        evp[0] = &event[0];
        n = kevent(kq, *evp, 1, NULL, 0, &ts);

        for (;;) {
                n = kevent(kq, 0, NULL, event, 1, NULL);
                if (n < 0)
                        err(1, "kevent");
                printf("kevent flags: 0x%x, data: 0x%x\n",
                    event[0].flags, event[0].data);

                n = read(fd, buffer, 128);
                buffer[n] = '\0';
                printf("%s", buffer);
        }
}
<

>--
>-Alfred Perlstein - [[EMAIL PROTECTED]]
>Instead of asking why a piece of software is using "1970s technology,"
>start asking why software is ignoring 30 years of accumulated wisdom.

Thanks again
Dominic Marks
_________________________________________________________________________
Get Your Private, Free E-mail from MSN Hotmail at http://www.hotmail.com.


To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-hackers" in the body of the message

Reply via email to