linux常用输入函数scanf和fgets通常都是阻塞式的:
1、如果用户没有输入,则程序会阻塞等待用户输入输入内容后,且需要用户点回车键才能完成读取键盘输入。
2、用户输入的信息,会在屏幕上显示出来。
以下代码实现了:
1、用户没有输入,则在设定时间过后,程序会继续运行下去
2、用户输入信息不会在屏幕上显示出来
3、程序能够不等待回车,直接响应键盘输入
代码如下:
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #define TTY_PATH "/dev/tty" #define STTY_US "stty raw -echo -F " #define STTY_DEF "stty -raw echo -F " #define UNUSED_PARAMTER(X) (void)(X) static char get_char( void ) { fd_set rfds; struct timeval tv; char input_char = 0; FD_ZERO(&rfds); FD_SET(0, &rfds); /** * Set wait time */ //tv.tv_sec = 0; //seconds //tv.tv_usec = 500; //microseconds /*Check for keyboard input.*/ if (select(1, &rfds, NULL, NULL, &tv) > 0) input_char = getchar(); return input_char; } char nonblocking_input( void ) { char input_char; system(STTY_US TTY_PATH); usleep(100); input_char = get_char(); system(STTY_DEF TTY_PATH); return input_char; } int main(int argc, char **argv) { UNUSED_PARAMTER(argc); UNUSED_PARAMTER(argv); char input_char; input_char = nonblocking_input();
printf("\n\tYour input is %c!\n", input_char);
printf("\nApplication finish.\n\n");
return 0;
}