那天写个程序,突然用到TC下的getch()函数,用以即时捕获键盘的输入,但Linux下是没有这个函数的,没办法,只能模拟这个函数。这个函数必须设置终端的属性,关于Linx下的编程,我已经忘记得差不多了,感慨啊。只能从网上求助大牛了,以下程序是一大牛写的,实现了该功能。
#include <stdio.h> #include <termios.h> #include <unistd.h> #include <assert.h> #include <string.h> int getch(void); int main(void) { char ch; printf("Input a char:"); fflush(stdin); ch = getch(); printf("\nYou input character is: %c\n", ch); return 0; } int getch(void) { int c=0; struct termios org_opts, new_opts; int res=0; //----- store old settings ----------- res=tcgetattr(STDIN_FILENO, &org_opts); assert(res==0); //---- set new terminal parms -------- memcpy(&new_opts, &org_opts, sizeof(new_opts)); new_opts.c_lflag &= ~(ICANON | ECHO | ECHOE | ECHOK | ECHONL | ECHOPRT | ECHOKE | ICRNL); tcsetattr(STDIN_FILENO, TCSANOW, &new_opts); c=getchar(); //------ restore old settings --------- res=tcsetattr(STDIN_FILENO, TCSANOW, &org_opts);assert(res==0); return c; }
代码出自:http://topic.csdn.net/u/20080417/16/6f0b781c-287a-485c-b370-7c62953c2193.html
感谢这位大牛。