Hi all,
  Thank you very much!I had solved the kbhit problem.I think the key is setting 
keyboard to raw mode.

Michael
----- Original Message ----- 
From: "s_a_white" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Cc: <[EMAIL PROTECTED]>
Sent: Friday, April 20, 2001 3:48 PM
Subject: Re: [rtl] kbhit


> > Hi all,
> >   I want to get the character while I strike any key,I try to use
> getchar(),but it need to strike ENTER to end of string,can I get the value
> of key immediately before I strike ENTER.In DOS,I can use kbhit() to check
> if there is any key to be striked,but how can I do in linux?
> >   I have no idea how to get the key. Do you have any idea?
> >
> > Thanks!
> >
> > Michael
> >
> 
> Hi,
> 
> I've seen you have had many replies, heres mine which I'm using in a program
> which is cross platform.  Just call enable and it'll work.  Make sure you
> call disable when you program exists (even for things like ^C)!
> 
> // Simulate Standard Microsoft Extensions under Unix
> int _kbhit (void)
> {   // Set no delay
>     static struct timeval tv = {0, 0};
>     fd_set rdfs;
> 
>     // See if key has been pressed
>     FD_ZERO (&rdfs);
>     FD_SET  (STDERR_FILENO, &rdfs);
>     if (select  (STDERR_FILENO + 1, &rdfs, NULL, NULL, &tv) <= 0)
>         return 0;
>     if (FD_ISSET (STDERR_FILENO, &rdfs))
>         return 1;
>     return 0;
> }
> 
> int _getch (void)
> {
>     char ch = 0;
>     if (read (STDERR_FILENO, &ch, 1) < 0);
>         return -1;
>     return ch;
> }
> 
> // Set keyboard to raw mode so getch will work
> static termios term;
> void keyboard_enable_raw ()
> {
>     // set to non canonical mode, echo off, ignore signals
>     struct termios current;
>     // save current terminal settings
>     tcgetattr (STDERR_FILENO, &current);
> 
>     // set to non canonical mode, echo off, ignore signals
>     term = current;
>     current.c_lflag &= ~(ECHO | ICANON | IEXTEN);
>     current.c_cc[VMIN] = 1;
>     current.c_cc[VTIME] = 0;
>     tcsetattr (STDERR_FILENO, TCSAFLUSH, &current);
> }
> 
> void keyboard_disable_raw ()
> {
>     // Restore old terminal settings
>     tcsetattr (STDERR_FILENO, TCSAFLUSH, &term);
> }
> 
> Simon
> 
> 
> -- [rtl] ---
> To unsubscribe:
> echo "unsubscribe rtl" | mail [EMAIL PROTECTED] OR
> echo "unsubscribe rtl <Your_email>" | mail [EMAIL PROTECTED]
> --
> For more information on Real-Time Linux see:
> http://www.rtlinux.org/rtlinux/
> 
-- [rtl] ---
To unsubscribe:
echo "unsubscribe rtl" | mail [EMAIL PROTECTED] OR
echo "unsubscribe rtl <Your_email>" | mail [EMAIL PROTECTED]
--
For more information on Real-Time Linux see:
http://www.rtlinux.org/rtlinux/

Reply via email to