C++ - kbhit() und getch() für Linux
Wer unter Windows die beiden Funktion kbhit() und getch() kennt, möchte wohl kaum unter Linux auf diese verzichten. Deswegen kann man die beiden Funktionen sich einfach selbst basteln:
kbhit():
#include <termios.h>
int kbhit(void);
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);
}
und getch():
#include <termios.h>
int getch();
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;
}
Kategorien
Programmieren0 TrackBacks
Folgende Einträge anderer Blogs beziehen sich auf den Eintrag C++ - kbhit() und getch() für Linux
TrackBack-URL dieses Eintrags: http://www.undertec.de/mt-cgi/mt-tb.cgi/161
2 Kommentare
Jetzt kommentieren


Und was machen diese Befehle so besonderes? (Nein, ich will jetzt nicht versuchen den C-Code zu verstehen... :-)
Die Funktion kbhit wartet auf einen Tastenanschlag (KeyBoard HIT) und liefert als Ergebnis "wahr" oder "falsch".
Und getch wartet auf ein Zeichen (ähnlich wie getchar), nur dass das Zeichen kein Echo auf dem Bildschirm macht und kein Enter als Bestätigung benötigt.
Ein guter Foreneintrag zum Thema mit der gleichen Erklärung findet sich auch hier: http://www.c-plusplus.de/forum/viewtopic-var-t-is-39320.html