思想是把终端设置为非缓存
- #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;
- }