linux下面实现检测按键(Linux中kbhit()函数的实现)
来源:互联网 发布:龙腾世纪审判优化补丁 编辑:程序博客网 时间:2024/04/29 21:52
- 在linux下面实现检测按键(Linux中kbhit()函数的实现)
#include <stdio.h>
#include <termios.h>#include <term.h>
#include <curses.h>
#include <unistd.h>
#include <stdlib.h>
static struct termios initial_settings, new_settings;
static int peek_character = -1;
void init_keyboard();
void close_keyboard();
int kbhit();
int readch();
int main()
{
int ch = 0;
init_keyboard();
while(ch != 'q') {
printf("looping\n");
sleep(1);
if(kbhit()) {
ch = readch();
printf("you hit %c\n",ch);
}
}
close_keyboard();
exit(0);
return 0;
}
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()
{
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;
}
方法二:
//用非阻塞io
#include <stdio.h>
#include <termios.h>
#include <unistd.h>
#include <fcntl.h>
int kbhit(void)
{
struct termios oldt, newt;
int ch;
int oldf;
tcgetattr(STDIN_FILENO, &oldt);
newt = oldt;
newt.c_lflag &= ~(ICANON | ECHO);
tcsetattr(STDIN_FILENO, TCSANOW, &newt);
oldf = fcntl(STDIN_FILENO, F_GETFL, 0);
fcntl(STDIN_FILENO, F_SETFL, oldf | O_NONBLOCK);
ch = getchar();
tcsetattr(STDIN_FILENO, TCSANOW, &oldt);
fcntl(STDIN_FILENO, F_SETFL, oldf);
if(ch != EOF)
{
ungetc(ch, stdin);
return 1;
}
return 0;
}
int main(void)
{
while(!kbhit())
puts("Press a key!");
printf("You pressed '%c'!/n", getchar());
return 0;
}
0 0
- 在linux下面实现检测按键(Linux中kbhit()函数的实现)
- linux下面实现检测按键(Linux中kbhit()函数的实现)
- 检测按键(Linux中kbhit()函数的实现)
- 在linux下面实现检测按键----实现Linux 下的kbhit函数
- (转)检测按键(Linux中kbhit()函数的实现)
- 按键检测----kbhit函数
- linux下模拟按键kbhit(),检测按键终止while(1)死循环
- linux系统kbhit的几种实现
- linux系统kbhit的几种实现
- linux-kbhit函数
- kbhit()在linux下的模拟,getch,getchar,不等待的键盘检测函数
- 使用kbhit函数判断键盘有无按键(非阻塞)
- kbhit函数(讲解)
- kbhit键盘检测函数
- Linux下面Gateway,DNS,Http,FTP的实现(一)
- Linux下面Gateway,DNS,Http,FTP的实现(三)
- Linux下面Gateway,DNS,Http,FTP的实现(四)
- Linux下面Gateway,DNS,Http,FTP的实现(二)
- Git系列三——系列总结
- 检测按键(Linux中kbhit()函数的实现)
- Jquery EasyUI环境搭建以及简单使用
- Python--访问限制
- 调错系列
- linux下面实现检测按键(Linux中kbhit()函数的实现)
- 使用openvpn连通多个机房内网
- Dijkstra单元点最短路径(不含负权)
- 如何写前端开发的改进建议书?
- 给Java程序猿们推荐一些值得一看的好书
- 第4章 数据类型
- Swift -6 面向对象基础(下)
- 面试题-单链表的逆序
- 黑马程序员——java集合框架的理解