//在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;
}

http://hi.baidu.com/wisonwu123/blog/item/a83a664230c80307cefca3ed.html
http://hi.baidu.com/weihuili5/blog/item/3c9d1a012a84a30d738da527.html

在linux下面实现检测按键(Linux中kbhit()函数的实现)相关推荐

  1. linux下面实现检测按键(Linux中kbhit()函数的实现)

    在linux下面实现检测按键(Linux中kbhit()函数的实现)   #include <stdio.h> #include <termios.h> #include &l ...

  2. linux下mkdir头文件_Linux中mkdir函数与Windows中_mkdir函数的区别

    下面先来给大家介绍windows下_mkdir函数 #include int _mkdir( const char *dirname ); 参数: dirname是目录的路径名指针 返回值: 如果新目 ...

  3. Visual Studio 2022中kbhit()函数与getch()函数的书写问题

    1.kbhit()_函数 kbhit()函数的作用是检查控制台窗口的按键是否被按下.如果在调用函数时,有按键被按下,则返回值为一个非0的值,否则该函数的返回值是0.kbhit()函数一般与getch( ...

  4. linux下硬件检测工具,Linux硬件检测工具

    Linux下的硬件检测和识别软件,做得比较完善了.选购Laptop,如果是自带Linux系统,完全可以用它们来检测硬件. 首先出场的当然是: 1. dmidecode  www.nongnu.org/ ...

  5. linux系统如何检测网络打印机,Linux系统配置工具网络与打印机与硬件侦测

    Linux系统配置工具网络与打印机与硬件侦测CentOS系统设定工具:setup--Red Hat版本中独有的东东 利用root身份下达setup指令,(使用远程操作系统的时候要切换成英文语系) 主菜 ...

  6. linux 系统后门检测工具,Linux系统的各种后门和日志工具详细介绍[2]

    chfn 提升本地普通用户权限的程序 运行chfn 在它提示输入新的用户名时 如果用户输入rookit密码 他的权限就被提升为root chsh 提升本地用户权限的程序 运行chsh 在它提示输入新的 ...

  7. linux 录屏软件 按键,linux下常用的截图、录屏工具

    linux下常用的截图.录屏工具 (2010-01-05 10:47:21) 由于和老公一起做一个百度俱乐部的小项目,在编写测试文档时要使用截图.录屏的小工具,于是展开搜索什么工具比较好使. 录屏: ...

  8. linux关闭硬盘检测,关闭Linux开机强制检测硬盘

    问题: Linux服务器启动的时候提示,输入root密码进行磁盘修复,如果修复不了,或者是LVM文件系统,然后就卡住了,从重启,到进入机房,中间过了有一小时时间,仍然卡在这里这块硬盘 是 stat 1 ...

  9. linux第一单元检测二,LINUX REDHAT第一单元文档

    进入系统 普通用户 studnet: 点击student 输入密码 进入普通用户student 超级用户 root: 单击                    >not listed 输入超级 ...

最新文章

  1. Python maketrans() 方法
  2. Android 开发第四弹:围住神经猫(简单Demo)
  3. vue项目打包与配置-学习笔记
  4. @requestbody和@requestparam到底什么作用
  5. oracle写转帐的存储过程,Oracle存储过程及块编程基础经典案例
  6. Linux常用远程连接工具介绍,总有一款适合你
  7. OC容器——图书馆 .h 文件
  8. 分屏 投影显示 PPT
  9. Quake3 快速开平方和开平方倒数计算优化
  10. 线性空间----【1】n维向量的线性相关
  11. 代理服务 SQUID 测试
  12. 如何打开百度?全过程介绍
  13. Redis安装与使用
  14. 2.5寸硬盘和3.5寸硬盘的区别和适用场景
  15. MAC下输入除号 (÷)等字符
  16. 阿里云docker 环境构建镜像的:lastest not found 问题
  17. js promise.all
  18. java 通用内存分页(List分页)
  19. RHCSA第四天作业
  20. MST6M182平台OSD制作

热门文章

  1. 大学英语计算机开学考试试题,2018年全国大学英语四级考试阅读理解试题:学习计算机...
  2. stringr | 文本处理方法(Ⅰ-1):字符串处理函数(上)
  3. 远程exp_Windows远程桌面服务漏洞(CVE-2019-0708)攻击代码现身
  4. 错误: 代理抛出异常错误: java.rmi.server.ExportException: Port already in use: 1099; nested exception is
  5. 软件中打开其他软件的方式
  6. python operator 多属性排序_Python爬取高颜值美女(爬虫+人脸检测+颜值检测)你能打几分?...
  7. hive分桶表join_Hive:JOIN及JOIN优化 2015.10.25
  8. 服务器一般安装那种centos_CentOS系统云服务器宝塔面板安装以及微信小程序服务器搭建...
  9. html外联内联,HTML内联元素
  10. STM8学习笔记---寄存器操作之位或和位与运算