dcj@AUSTIN.LOCKHEED.COM (David Jacobson rimux) (04/13/91)
HI! ;-) I'm rather a novice at Unix I/O. I've been RTFMing about the select command and believe I'm misunderstanding it. I would like to use the select command to sit on a serial device object descriptor (fd) and come off the select when any data has come in. Q1: Is this possible? I'd then proceed to read (and write) to (and from) the object descriptor. Unfortunately, my program sits on my select and never comes off. Q2: Do you see the error in my concept of select or in my code below? Any help would be greatly appreciated. I'll post the answer for those that are interested. A simplified example of my attempt follows: === Start Source =================================================== ... all the necessary includes main(argc, argv) int argc; char *argv[]; { static int maxfdp1; fd_set readmask; boolean nfound = FALSE; static struct timeval timeout; /** open serial port file descriptor **/ if ((fd = open(STUDeviceName, O_RDWR|O_NOCTTY)) == -1) { fprintf(stderr,"Could not open %s.\n",STUDeviceName); exit(1); } FD_ZERO(&readmask); FD_SET(fd, &readmask); maxfdp1 = fd++; /** Watch for IO on port **/ nfound = select(maxfdp1, &readmask, (fd_set *) 0, (fd_set *) 0, NULL); if (nfound < 0) { fprintf(stderr,"Select error.\n"); exit(1); } ... start reading/writing from/to fd } /* end main() */ === End Source ===================================================== ____________________________________ _______________________________________ . | David C. Jacobson =========___/ \___ Lockheed | (512) 386-4267 =======`/ . \' Austin Division | INTERNET: ===/' `\ (LAD) | dcj@austin.lockheed.com ____________________________________|_______________________________________ `Nothing of what I say has anything to do with anybody in any way.'
theo@integow.uucp (Theo Hardendood) (04/18/91)
From article <533@shrike.AUSTIN.LOCKHEED.COM>, by dcj@AUSTIN.LOCKHEED.COM (David Jacobson rimux): > I would like to use the select command to sit on a serial device > object descriptor (fd) and come off the select when any data has come > in. > > Q1: Is this possible? > Yes (although I read somewhere that not all devices support select calls) > descriptor. Unfortunately, my program sits on my select and never comes > off. > > Q2: Do you see the error in my concept of select or in my code below? > ... (some stuff deleted) > > FD_ZERO(&readmask); > FD_SET(fd, &readmask); > maxfdp1 = fd++; ^^^^ This must be: maxfdp1 = fd + 1; Hope this helps! -- UUCP: ..!uunet!mcsun!hp4nl!integow!theo or theo@integow.uucp Theo Hardendood, Sr. software engineer, Integrity software consultants, Pelmolenlaan 2, 3447 GW Woerden, The Netherlands. tel +31 3480 30131, fax +31 3480 30182
goehring@mentor.cc.purdue.edu (Scott Goehring) (04/24/91)
In article <1580@integow.uucp> theo@integow.uucp (Theo Hardendood) writes: From article <533@shrike.AUSTIN.LOCKHEED.COM>, by dcj@AUSTIN.LOCKHEED.COM (David Jacobson rimux): > I would like to use the select command to sit on a serial > device object descriptor (fd) and come off the select when any > data has come in. > > Q1: Is this possible? Yes (although I read somewhere that not all devices support select calls) correction: all devices *support* select. some, however, always report that the device is ready (disks, for example), thereby supporting select in a less-than-useful fashion. -- Help stamp out vi in our lifetime! Scott Goehring goehring@mentor.cc.purdue.edu goehring@gnu.ai.mit.edu "Then go cast an astral spell on yourself, ok?"