linux环境下c回车,linux_C 让 getchar()不再需要回车
今天在寫一個C程序,用到getchar()時發(fā)現(xiàn),它和windows(或dos)下不太一樣,linux下會將輸入的內(nèi)容緩沖起來,等按了回車之后才去一個一個的讀取緩沖區(qū)中的內(nèi)容。標準輸入設備應該都是行緩沖的,不管哪個函數(shù)應該都避免不了輸入回車了......
所以就想辦法看有沒有可能在按下鍵盤后就立刻獲取到字符,后來發(fā)現(xiàn)可以像串口設備那樣去操作,來修改終端的屬性,如下程序中的set_keypress()函數(shù)既實現(xiàn)了設置終端為RAW模式(不緩沖,一次讀入一個字符),并且關閉了回顯的功能;reset_keypress()函數(shù)可實現(xiàn)恢復終端的屬性設置。
/
/// keypress.c文件內(nèi)容
#include "keypress.h"
#include
static struct termios stored_settings;
void
set_keypress(void)?//設置終端為RAW模式,并關閉回顯
{
struct
termios new_settings;
tcgetattr(0,&stored_settings);
new_settings = stored_settings;
new_settings.c_lflag &= (~ICANON);
new_settings.c_lflag &= (~ECHO);
new_settings.c_cc[VTIME] = 0;
new_settings.c_cc[VMIN] = 1;
tcsetattr(0,TCSANOW,&new_settings);
return;
}
void
reset_keypress(void)?//恢復終端屬性
{
tcsetattr(0,TCSANOW,&stored_settings);
return;
}
/
//?keypress.h 文件內(nèi)容
#ifndef _INCLUDE_KEYPRESS_H_
#define _INCLUDE_KEYPRESS_H_
#include
void set_keypress(void);
void reset_keypress(void);
#endif?//_INCLUDE_KEYPRESS_H_
/
//測試程序
#include
#include
#include "keypress.h"
int main()
{
int i = 0;
int key = 0;
set_keypress();?//設置終端為RAW模式,并關閉回顯
while((i++)<10)
{?key = getchar();
printf("key=%d\n",key);
}
reset_keypress();?//測試完成后恢復終端屬性
i = 0;
while((i++)<10)
{
key=getchar();
printf("key=%d\n",key);
}?return 0;
}
/
總結
以上是生活随笔為你收集整理的linux环境下c回车,linux_C 让 getchar()不再需要回车的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux有趣小工具命令,终端中的乐趣:
- 下一篇: uboot修改linux源码中参数,将自