how to get keyboard key with non blocking in terminal
/*************************************************************************** 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相关推荐
- keyboard键盘demo
main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:and ...
- Keyboard, mouse and joystick
系列文章 SFML-windows 篇 SFML-Events explained 篇 SFML-Keyboard, mouse and joystick 篇 SFML-Using OpenGL in ...
- android keyboard颜色,Android基于KeyboardView和Keyboard实现自定义软键盘 自定义键盘背景色...
Android基于KeyboardView和Keyboard实现自定义软键盘 在一些特别的情况下我们需要去自定义键盘 例如: 银行app的密码输入之类的 笨方法就是直接使用布局写我们的自定义软键盘 但 ...
- Android基于KeyboardView和Keyboard实现自定义软键盘 自定义键盘背景色
Android基于KeyboardView和Keyboard实现自定义软键盘 在一些特别的情况下我们需要去自定义键盘 例如: 银行app的密码输入之类的 笨方法就是直接使用布局写我们的自定义软键盘 但 ...
- Keyboard与KeyboardView --- 自定义键盘
[记录]记录点滴 场景: 实现自定义的身份证键盘 需求: 实现0-9数字键,X键,确认键(或其他),删除键 1. 利用Keyboard实现布局 在res/xml目录下创建keyboard的布局xml文 ...
- 获取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 ...
- python输入单个字符_关于输入:Python从用户读取单个字符
有没有从用户输入中读取单个字符的方法?例如,他们在终端按下一个键,然后返回(类似于getch()).我知道Windows中有一个函数,但是我想要一个跨平台的函数. 在Windows上,我遇到了和这个问 ...
- Android APIs (Class Index - Android SDK)(一)
这些是Android API(API level: 19)类 类名 描述 A AbortableHttpRequest Interface representing an HTTP request t ...
- pynput使用简单说明
控制鼠标 1 from pynput.mouse import Button, Controller 2 import time 3 4 mouse = Controller() 5 print(mo ...
- 10行 python 代码做出哪些酷炫的事情?
来源 | Python小二 Python凭借其简洁的代码,赢得了许多开发者的喜爱.因此也就促使了更多开发者用Python开发新的模块,从而形成良性循环,Python可以凭借更加简短的代码实现许多有趣的 ...
最新文章
- python使用什么注释语句和运算-怎么使用python注释语句
- JAVA集合迭代遍历和特性介绍
- innodb和my查询速度_mysql存储引擎MyISAM和InnoDB
- 配置mysql为主主复制步骤
- 单选 textarea 赋初值
- Java中类的初始化顺序是什么?
- Android记录日志方式,关于Android中处理崩溃异常和记录日志的另一种实现思路
- html5晶格化,前端开发——滚滚屏(没纵向滚动条)
- HDU 3400 Line belt (三分)
- 如何在 macOS Monterey 中更改光标的颜色样式?
- mysql工厂模式_工厂模式IDAL详解
- 概率论--Z=X+Y概率密度的推导
- 中介管理系统php源代码,PHP房产中介管理系统小程序源码8.0.5 后台+前端
- Coordinatorlayout嵌套滑动,自定义Behavior,听我来讲讲?
- docker安装踩坑
- 常州工学院Java作业03
- Ubuntu20.04安装vscode打开出现花屏
- 餐饮行业选址如何用大数据软件了解相关要素
- PKI证书签发系统(2.0web版)
- USB 设备无法识别故障的排除