Pendant zu getch() und kbhit() im unix bereich???
-
Hi,
ich suche eine entsprechenden Funktion die wie _getch() (windows) einzelne Zeichen von der Tastatur einließt ohne das man mit Enter die eingabe beenden muß. Da es anscheinend keine solche ANSI - Funktion gibt frag ich hier ob es unter Unix sone funktion speziell gibt
Benngun
[edit]Titel erweitert um den FAQ Eintrag schneller auffindbar zu machen (Original: "Pendant zu _getch() im unix bereich???")[/edit]
-
#include <termios.h> int getch() { static int ch = -1, fd = 0; struct termios neu, alt; fd = fileno(stdin); tcgetattr(fd, &alt); neu = alt; neu.c_lflag &= ~(ICANON|ECHO); tcsetattr(fd, TCSANOW, &neu); ch = getchar(); tcsetattr(fd, TCSANOW, &alt); return ch; }
[edit by kingruedi]Bug fixed[/edit]
-
... und weil's so schön ist hier noch kbhit()
#include <termios.h> int kbhit(void) { struct termios term, oterm; int fd = 0; int c = 0; tcgetattr(fd, &oterm); memcpy(&term, &oterm, sizeof(term)); term.c_lflag = term.c_lflag & (!ICANON); term.c_cc[VMIN] = 0; term.c_cc[VTIME] = 1; tcsetattr(fd, TCSANOW, &term); c = getchar(); tcsetattr(fd, TCSANOW, &oterm); if (c != -1) ungetc(c, stdin); return ((c != -1) ? 1 : 0); }
-
ansonsten wird man vielleicht auch mit den ncurses oder der uconio glücklich