/***************************************************************************        how to get keyboard key with non blocking in terminal* 声明:*      如何在终端下以非堵塞的方式获取按键的键值,这个想法最初是因为*  在单线程下实现多任务,同时不因键盘输入而堵塞,核心内容来自网络,*  但已经忘了出处。* *                                    2015-7-5 晴 深圳 南山平山村 曾剑锋*************************************************************************/\\\\\\-*- 目录 -*-/////|  一、cat kbhit.h|  二、cat kbhit.c\\\\\\\\\\\\///

一、cat kbhit.h#ifndef __KBHIT_H__#define __KBHIT_H__#include <stdio.h>#include <termios.h>/*** 初始化键盘操作*/void init_keyboard(void);/*** 关闭键盘操作*/void close_keyboard(void);/*** 判断是否有按键按下,如果有案件按下返回1,没有按键按下* 则返回0*/int kbhit(void);/*** 用于在有案件按下之后,读取字符*/int readch(void);#endif // __KBHIT_H__二、cat kbhit.c#include "kbhit.h"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;}

how to get keyboard key with non blocking in terminal相关推荐

  1. keyboard键盘demo

    main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:and ...

  2. Keyboard, mouse and joystick

    系列文章 SFML-windows 篇 SFML-Events explained 篇 SFML-Keyboard, mouse and joystick 篇 SFML-Using OpenGL in ...

  3. android keyboard颜色,Android基于KeyboardView和Keyboard实现自定义软键盘 自定义键盘背景色...

    Android基于KeyboardView和Keyboard实现自定义软键盘 在一些特别的情况下我们需要去自定义键盘 例如: 银行app的密码输入之类的 笨方法就是直接使用布局写我们的自定义软键盘 但 ...

  4. Android基于KeyboardView和Keyboard实现自定义软键盘 自定义键盘背景色

    Android基于KeyboardView和Keyboard实现自定义软键盘 在一些特别的情况下我们需要去自定义键盘 例如: 银行app的密码输入之类的 笨方法就是直接使用布局写我们的自定义软键盘 但 ...

  5. Keyboard与KeyboardView --- 自定义键盘

    [记录]记录点滴 场景: 实现自定义的身份证键盘 需求: 实现0-9数字键,X键,确认键(或其他),删除键 1. 利用Keyboard实现布局 在res/xml目录下创建keyboard的布局xml文 ...

  6. 获取Authorize.Net Transaction Key ( Getting Your Authorize.Net Transaction Key )

    Getting Your Authorize.Net Transaction Key To use Credit Card Terminal, you'll need your Transaction ...

  7. python输入单个字符_关于输入:Python从用户读取单个字符

    有没有从用户输入中读取单个字符的方法?例如,他们在终端按下一个键,然后返回(类似于getch()).我知道Windows中有一个函数,但是我想要一个跨平台的函数. 在Windows上,我遇到了和这个问 ...

  8. Android APIs (Class Index - Android SDK)(一)

    这些是Android API(API level: 19)类 类名 描述 A AbortableHttpRequest Interface representing an HTTP request t ...

  9. pynput使用简单说明

    控制鼠标 1 from pynput.mouse import Button, Controller 2 import time 3 4 mouse = Controller() 5 print(mo ...

  10. 10行 python 代码做出哪些酷炫的事情?

    来源 | Python小二 Python凭借其简洁的代码,赢得了许多开发者的喜爱.因此也就促使了更多开发者用Python开发新的模块,从而形成良性循环,Python可以凭借更加简短的代码实现许多有趣的 ...

最新文章

  1. python使用什么注释语句和运算-怎么使用python注释语句
  2. JAVA集合迭代遍历和特性介绍
  3. innodb和my查询速度_mysql存储引擎MyISAM和InnoDB
  4. 配置mysql为主主复制步骤
  5. 单选 textarea 赋初值
  6. Java中类的初始化顺序是什么?
  7. Android记录日志方式,关于Android中处理崩溃异常和记录日志的另一种实现思路
  8. html5晶格化,前端开发——滚滚屏(没纵向滚动条)
  9. HDU 3400 Line belt (三分)
  10. 如何在 macOS Monterey 中更改光标的颜色样式?
  11. mysql工厂模式_工厂模式IDAL详解
  12. 概率论--Z=X+Y概率密度的推导
  13. 中介管理系统php源代码,PHP房产中介管理系统小程序源码8.0.5 后台+前端
  14. Coordinatorlayout嵌套滑动,自定义Behavior,听我来讲讲?
  15. docker安装踩坑
  16. 常州工学院Java作业03
  17. Ubuntu20.04安装vscode打开出现花屏
  18. 餐饮行业选址如何用大数据软件了解相关要素
  19. PKI证书签发系统(2.0web版)
  20. USB 设备无法识别故障的排除

热门文章

  1. ASP.NET中用healthMonitor属性用法
  2. 【转】TCP状态变迁图
  3. springmvc中校验框架(hibernate)
  4. putty详细使用说明
  5. java基础--集合框架的认识
  6. 跟踪wordcount计数器的运行信息
  7. Scrapy架构及其组件之间的交互
  8. BaKoMa Tex Word 的使用
  9. spring相关记录
  10. cxgrid定位在第一行并显示内置编辑器