kbhit linux windows通用,linux模拟windows的kbhit
linux模拟windows的kbhit
Windows有个很不错的函数kbhit,可以检测是否有任何键按下了。例如我们可以检测键按下,来退出一个无限循环。还可以得到用户按下的这个键。
但是linux默认是没有这个函数的,我们可以使用下面自定义的函数来实现这个功能。
实现的原理就是将阻塞模式的stdin改为非阻塞模式,然后尝试读取,读的时候有东西则按下了键,否则没有。
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(int n_args, char* args[])
{
pthread_t tid;
int uin;
pthread_create( &tid, NULL, update_thread_proc, NULL);
while( 1 )
{
if ( kbhit())
{
uin = getchar();
}
else
{
usleep( 100000 );
}
}
}
除了上面的这种实现之外,还有一种就是select模式实现。使用select去检测stdin这个文件(在linux中一切IO都可以看做文件),是否有东西可读。有兴趣可以自己写一个。
版权所有,禁止转载. 如需转载,请先征得博主的同意,并且表明文章出处,否则按侵权处理.
分享到:
kbhit linux windows通用,linux模拟windows的kbhit相关推荐
- 使用Samba实现Windows与Linux主机之间文件共享
samba是一种可以在Linux/Unix主机上模拟windows主机的NetBIOS和CIFS/SMB实现与windows主机之间文件共享的软件.只要linux主机安装了samba,windows端 ...
- linux下IO口模拟I2C的一些总结
2019独角兽企业重金招聘Python工程师标准>>> 以前一直在用I2C接口,因为总是有线程的例子就一直没有去深入的了解,今天分析了一下在linux下通用GPIO模拟I2C的程序. ...
- Windows和Linux下通用的线程接口
对于多线程开发,Linux下有pthread线程库,使用起来比较方便,而Windows没有,对于涉及到多线程的跨平台代码开发,会带来不便.这里参考网络上的一些文章,整理了在Windows和Linux下 ...
- linux日志文件存放目录,Log4j 日志文件Linux/Mac/Windows通用存放位置设置方法
log4j1/log4j2中category的配置以及log的输出位置(windows和linux通用的log输出位置) 一.场景和需求 假设我现在有3个独立的用project(暂时用maven关联起 ...
- Linux多定时器实现之三——Windows和Linux通用版
Linux多定时器实现之三--Windows和Linux通用版 支持windows和linux. 支持秒以下定时器. /**************************************** ...
- Selenium测试时清理chromedriver【linux\windows通用】
Selenium测试时清理chromedriver[linux\windows通用] 我们平时在使用chromedriver驱动时会存在未完全清楚的现象 解决思路 1.打开chromedriver时记 ...
- linux win95模拟,Windows 95模拟器
Windows 95模拟器是独立开发者所制作的一款软件,GitHub上面的大神将Windows95用软件的方式来进行还原,通过软件的形式你能够再一次的体验到在电脑上面运行Windows95的感觉,不需 ...
- 理解JVM如何使用Windows和Linux上的本机内存
转至:http://www.chineselinuxuniversity.net/articles/23291.shtml 摘要:Java™ 堆耗尽并不是造成 java.lang.OutOfMemor ...
- windows和linux双系统
像我们运维学习者,平常会用到linux,但是又必不可免的会用到windows,所以在一台电脑上安装linux和windows双系统就成了刚需,那么如何来安装windows和linux双系统呢 实验环境 ...
最新文章
- 插入DLL和挂接API——Windows核心编程学习手札之二十二
- Livemesh文件同步功能--使用图解
- OGRE 1.7.2 [Cthugha] 编译配置全过程方法
- linux下安装node.js
- ByteBuf主要继承关系图
- 2. Mysql数据库的入门知识
- 6大新品重磅发布,华为云全栈云原生技术能力持续创新升级
- 人工智能是一个工程问题,而不是魔术!
- struts2 文件上传下载注解示例
- 罗技鼠标驱动ghub怎么设置?
- 如何快速自学生物信息学
- 免费数据恢复软件恢复SanDisk丢失的资料
- 融资融券的交易成本有哪些?
- 技术工作总结报告安全性设计报告用户手册如何编写
- 电子与通信工程专硕考分_分享我的苏州大学电子与通信工程专硕考研经历
- 盘盈的存货一般应作为什么处理
- 面试数据库知识点总结
- 从零开始实现一个量化回测系统(一)
- Linux bc命令
- 笔记本电脑如何选购并安装内存条
热门文章
- python处理pdf实例_python实现pdf转word的例子
- linux 如何自定义安装路径,Linux下安装mysql并自定义数据的存储路径
- oracle简易数据库搭建,Oracle 10g 手工创建一个最简单的数据库
- android 控制流混淆 反向,AST混淆实战:仿obfuscator混淆控制流平坦化
- OpenShift 4 - 为客户端配置使用基于CA证书的kubeconfig实现无密码登录
- 使用WPF和.NET 6将Windows应用程序迁移到Windows on Arm
- (五)如何训练和测试AI语言翻译系统
- 使用Jenkins在Azure Web App上进行ASP.NET Core应用程序的持续集成和部署(CI/CD)–第4天
- 谷歌正在移除 Chrome 的“关闭其他选项卡”选项
- 微软宣布 SQL Server 2019 免费支持 Java