Date: Tue, 23 Nov 1999 15:42:52 -0800 (PST) From: Alfred Perlstein <bright@wintelcom.net> To: Seva "Semenov" <seva@mtelecom.ru> Cc: freebsd-hackers@FreeBSD.ORG Subject: Re: fcntl(0,F_SETFL,O_ASYNC) & signal(SIGIO,rkbd); don't work in 3.X !!!! Message-ID: <Pine.BSF.4.21.9911231541040.4557-100000@fw.wintelcom.net> In-Reply-To: <383B1755.F432A049@mtelecom.ru>
next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, 24 Nov 1999, Seva Semenov wrote: > Why my little proggy can't get SIGIO in FreeBSD 3.3-RELEASE, > when i type my keyboard? > > In 2.2.6-RELEASE it works right. > > > #include <stdio.h> > #include <fcntl.h> > #include <string.h> > #include <sys/types.h> > #include <unistd.h> > #include <err.h> > #include <signal.h> > #include <syslog.h> > #include <errno.h> > #include <err.h> > > void > rkbd(int sig) > { > int i,j; > u_char b[1024],*c; > > syslog(LOG_DEBUG,"***** "); > > i=read(0,b,1024); > if(i<0) > syslog(LOG_DEBUG,"read failed due to %s",strerror(errno)); > > else > if(!i) > syslog(LOG_DEBUG,"read null bites"); > else{ > b[i]='\0'; > puts("\n******"); > fputs(b,stdout); > puts("******\n"); > fflush(stdout); > } > } > > int > main(int argc,char **argv) > { > if(fcntl(0,F_SETFL,O_ASYNC)==-1) > err(errno,NULL); > signal(SIGIO,rkbd); > for(;;){ > sleep(10); > } > } i'm not sure why the change happened, but here's a fix: --- sigio.old.c Tue Nov 23 19:18:01 1999 +++ sigio.c Tue Nov 23 19:19:21 1999 @@ -36,7 +36,14 @@ int main(int argc,char **argv) { + int arg; + + arg = getpid(); + + if(fcntl(0,F_SETFL,O_ASYNC)==-1) + err(errno,NULL); + if(fcntl(0,F_SETOWN,arg)==-1) err(errno,NULL); signal(SIGIO,rkbd); for(;;){ unless this is strictly a test program you should be using the constants "STDIN_FILENO" afaik. -Alfred 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?Pine.BSF.4.21.9911231541040.4557-100000>