Return to BSD News archive
Xref: sserve comp.os.lynx:127 comp.unix.bsd:13076 Path: sserve!newshost.anu.edu.au!munnari.oz.au!bunyip.cc.uq.oz.au!harbinger.cc.monash.edu.au!yeshua.marcam.com!news.kei.com!sol.ctr.columbia.edu!howland.reston.ans.net!europa.eng.gtefsd.com!uunet!decwrl!parc!draco!leisner From: leisner@draco (Marty Leisner 25733) Newsgroups: comp.os.lynx,comp.unix.bsd Subject: select, read and named pipes Date: 13 Dec 1993 23:17:04 GMT Organization: Xerox Palo Alto Research Center Lines: 82 Message-ID: <2eit5g$t3i@news.parc.xerox.com> Reply-To: leisner@sdsp.mc.xerox.com NNTP-Posting-Host: draco.sdsp.mc.xerox.com X-Newsreader: TIN [version 1.2 PL2] I have this program: /tmp/devpp is a named pipe. 1) on sunos sparc it run as expected (processes can open/close /tmp/devpp, and select is only knocked out when something is there to be read. 2) on lynx/sparc, it works until the first process terminates (closes the pipe). Then select returns a postive response (something interesting happened), and read returns 0 (nothing to read). #include <stdio.h> #include <fcntl.h> #include <sys/types.h> #include <sys/time.h> static void test_and_read(const int fd) { fd_set read_set; int status; static int i = 0; char buffer[1024]; i++; FD_ZERO(&read_set); FD_SET(fd, &read_set); status = select(fd +1, &read_set, NULL, NULL, NULL); switch(status) { case 0: printf("Nothing in loop %d\n", i); break; case -1: perror("select"); break; default: if(FD_ISSET(fd, &read_set)) { int num_bytes; num_bytes = read(fd, &buffer, sizeof(buffer)); printf("Read %d bytes in loop %d\n", num_bytes, i); } else printf("No fd set in %d\n", i); } } main() { int fd; #if 0 fd = open("/tmp/devpp", O_RDONLY | O_NDELAY); #else fd = open("/tmp/devpp", O_RDONLY ); #endif if(fd < 0) { perror("open /tmp/devpp"); exit(1); } while(1) test_and_read(fd); } The O_NDELAY only has an effect if the open blocks or not... I would appreciate if this was run on other BSD systems to determine the behavior. Also any comments on whether the SunOS behavior is correct or not... -- marty leisner@sdsp.mc.xerox.com leisner.henr801c@xerox.com Member of the League for Programming Freedom "I just know I'm a better manager when I have Joe DiMaggio in center field" -- Casey Stengel