>* 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