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