linux下kbhit的头文件,linux下kbhit的实现
我們知道,在windows下有個鍵盤測試函數(shù),int kbhit(void)。使用該函數(shù)需要包含頭文件conio.h。執(zhí)行時,kbhit測試是否有鍵盤按鍵按下,若有則返回非零值,否則返回零。
在Unix/Linux下,并沒有提供這個函數(shù)。在linux下開發(fā)控制臺程序時,有時會遇到檢測鍵盤是否有被按下的情況,這時就需要自己編寫kbhit()實現(xiàn)的程序了。下面是kbhit在Unix/Linux下的一個實現(xiàn)。用到了一種終端操作庫termios。
下面是頭文件kbhit.h:
#ifndef KBHITh
#define KBHITh
void?? init_keyboard(void);
void?? close_keyboard(void);
int????? kbhit(void);
int???? readch(void);
#endif
下面式源程序kbhit.c:
#include "kbhit.h"
#include #include // for read()
static struct termios initial_settings, new_settings;
static int peek_character = -1;
void init_keyboard()
{
tcgetattr(0,&initial_settings);
new_settings = initial_settings;
new_settings.c_lflag &= ~ICANON;
new_settings.c_lflag &= ~ECHO;
new_settings.c_lflag &= ~ISIG;
new_settings.c_cc[VMIN] = 1;
new_settings.c_cc[VTIME] = 0;
tcsetattr(0, TCSANOW, &new_settings);
}
void close_keyboard()
{
tcsetattr(0, TCSANOW, &initial_settings);
}
int kbhit()
{
unsigned char ch;
int nread;
if (peek_character != -1) return 1;
new_settings.c_cc[VMIN]=0;
tcsetattr(0, TCSANOW, &new_settings);
nread = read(0,&ch,1);
new_settings.c_cc[VMIN]=1;
tcsetattr(0, TCSANOW, &new_settings);
if(nread == 1)
{
peek_character = ch;
return 1;
}
return 0;
}
int readch()
{
char ch;
if(peek_character != -1)
{
ch = peek_character;
peek_character = -1;
return ch;
}
read(0,&ch,1);
return ch;
}
總結(jié)
以上是生活随笔為你收集整理的linux下kbhit的头文件,linux下kbhit的实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何设置vs窗口的属性管理器和解决方案管
- 下一篇: U盘出现物理故障都有哪些表现