Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 02 May 2001 21:57:30 -0000
From:      "Dominic Marks" <dominic_marks@hotmail.com>
To:        bright@wintelcom.net
Cc:        freebsd-hackers@FreeBSD.ORG
Subject:   Re: KEvent doesnt return and KEvent sample troubles
Message-ID:  <F135EpTX5V3GykBbKP70000025b@hotmail.com>

next in thread | raw e-mail | index | archive | help



>* Dominic Marks <dominic_marks@hotmail.com> [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 - [alfred@freebsd.org]
>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 majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?F135EpTX5V3GykBbKP70000025b>