unix terminal i/o

Paul S. R. Chisholm psc at lzwi.UUCP
Tue Jun 18 23:17:57 AEST 1985


< Smokey the Bar says, "Help stamp out software pirates" [squish!] >

In article <452 at mmintl.UUCP>, robg at mmintl.UUCP (Robert Goldman) writes:
> 
> I am working on a program that needs to access the terminal in a pretty raw
> state.  In particular, it must have some way to tell whether there are any
> keys in the input buffer waiting to be read.  Is there some portable unix
> call that responds with this information?
> 			Robert Goldman, MultiMate International

In Unix(tm) System III and V (all releases), you can ioctl() the line
to have VMIN and VTIME set to 0; a read() will only get any characters
in the input queue.  (Note that ioctl(fd,TCFLSH,0) will flush the input
queue.)

More portably, you can fcntl() the file descriptor with O_NDELAY, which
avoids blocking on tty's and pipes (and fifos).  If you're always going
to avoid blocking, you can open() the file with O_NDELAY.

Both ioctl() and fcntl() are pretty cheap to call, so it's not too
expensive to go back and forth.
--
Unix is a trademark of some entity within AT&T, but I don't know what
it's called this week.  AT&T's Bell Labs?
-- 
       -Paul S. R. Chisholm       The above opinions are my own,
       {pegasus,vax135}!lzwi!psc  not necessarily those of any
       {mtgzz,ihnp4}!lznv!psc     telecommunications company.



More information about the Comp.unix mailing list