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>