Linux 一次读取单个字符

  • 发布时间:2017-06-14 11:31:42
  • 作者:Jess_喵
  • 标签:linux,c,termios

在linux c编程中出入标准输入时,通常在键入回车时才会刷新缓冲区,但有时候需要实时处理键入的数据那该怎么办呢?我们可以修改当前终端属性以达到这种效果。

#include <termio.h>  
#include <stdio.h>  
  
  
int scanKeyboard()  
{  
int in;  
struct termios new_settings;  
struct termios stored_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);  
  
in = getchar();  
  
tcsetattr(0,TCSANOW,&stored_settings);  
return in;  
}  
  
//这个方法就可以,返回值是该键的ASCII码值,不需要回车的,  

//测试函数  
int main(){  
while(1){  
printf(":%d",scanKeyboard());  
}  
}  


这样在每一次键入的字都会触发相关处理方法