004
28.11.2003, 17:47 Uhr
0xdeadbeef
Gott (Operator)
|
Das ist wahrscheinlich nicht das, was du willst. Die einfachere Möglichkeit wäre, per termio.h das Terminal auf unbuffered zu stellen. Ich poste den Code hier nochmal (inzwischen zum vierten oder so), und dann schiebe ich diesen Thread in die Linux-FAQ.
C++: |
#include <stdio.h> #include <termios.h>
void setTerminalBuffering(int new_state) { static struct termios stored_settings; static int old_state = 1; if(!old_state == !new_state) return; //nix zu tun old_state = new_state; if(!new_state) { struct termios new_settings; tcgetattr(0,&stored_settings); new_settings = stored_settings; new_settings.c_lflag &= (~ICANON); new_settings.c_cc[VTIME] = 0; tcgetattr(0,&stored_settings); new_settings.c_cc[VMIN] = 1; tcsetattr(0,TCSANOW,&new_settings); } else { tcsetattr(0,TCSANOW,&stored_settings); } }
int main() { setTerminalBuffering(0); //ab jetzt geht getchar() wie getch() printf("\n%c\n", getchar()); setTerminalBuffering(1); //jetzt will getchar() wieder ein return haben return 0; }
|
Damit ist es dann auch möglich, ein getch() zu bauen:
C++: |
int getch() { int ret; setTerminalBuffering(0); ret = getchar(); setTerminalBuffering(1); return ret; }
|
-- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra Dieser Post wurde am 01.12.2004 um 00:35 Uhr von 0xdeadbeef editiert. |