Testing if keystrokes are waiting in the buffer (solution)
Warren Tucker
wht at n4hgf.uucp
Fri May 4 06:15:34 AEST 1990
In article <24107 at mimsy.umd.edu> chris at mimsy.umd.edu (Chris Torek) writes:
>(First, an obligatory note to comp.lang.c readers: the notion of a `key'
>is found nowhere in the C language, therefore the notion of testing for
>...
well said
>Readers not interested in Unix details can skip the rest of
>this followup.
ditto
BSD: ioctl(0,FIONREAD,&number_of_chars_waiting_to_be_read);
XENIX V, SCO UNIX, UNIX Sys V Rel 4:
if(rdchk(0)) /* if ICANON is on, rdchk will report nothing until
* newline or whatever is typed */
{
data is waiting ...
}
else
{
no data is waiting ...
}
Sys V Rel 2, standard Rel 3: (tricky; this is just a clue)
ioctl(0,TCGETA,&termio_struct_at_beginning);
ioctl(0,TCGETA,&termio_struct);
termio_struct.c_lflags ~= ~(ICANON);
termio_struct.c_cc[VMIN] = 0;
termio_struct.c_cc[VTIME] = 0;
ioctl(0,TCSETA,&termio_struct);
if((i = read(0,&input_char,1) == 0)
{
no input
}
else if(i < 0)
{
read error
}
else
{
'input_character' has a charcter
}
/* before program terminates */
ioctl(0,TCSETA,&termio_struct_at_beginning);
V7: horrible /dev/kmem munging you dont want to hear about
------------------------------------------------------------------
Warren Tucker, TuckerWare gatech!n4hgf!wht or wht%n4hgf at gatech.edu
McCarthyism did to cinema what ANSI did to C, cast a great number
of characters into the void.
More information about the Comp.unix.questions
mailing list