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相关推荐

  1. 使用Samba实现Windows与Linux主机之间文件共享

    samba是一种可以在Linux/Unix主机上模拟windows主机的NetBIOS和CIFS/SMB实现与windows主机之间文件共享的软件.只要linux主机安装了samba,windows端 ...

  2. linux下IO口模拟I2C的一些总结

    2019独角兽企业重金招聘Python工程师标准>>> 以前一直在用I2C接口,因为总是有线程的例子就一直没有去深入的了解,今天分析了一下在linux下通用GPIO模拟I2C的程序. ...

  3. Windows和Linux下通用的线程接口

    对于多线程开发,Linux下有pthread线程库,使用起来比较方便,而Windows没有,对于涉及到多线程的跨平台代码开发,会带来不便.这里参考网络上的一些文章,整理了在Windows和Linux下 ...

  4. linux日志文件存放目录,Log4j 日志文件Linux/Mac/Windows通用存放位置设置方法

    log4j1/log4j2中category的配置以及log的输出位置(windows和linux通用的log输出位置) 一.场景和需求 假设我现在有3个独立的用project(暂时用maven关联起 ...

  5. Linux多定时器实现之三——Windows和Linux通用版

    Linux多定时器实现之三--Windows和Linux通用版 支持windows和linux. 支持秒以下定时器. /**************************************** ...

  6. Selenium测试时清理chromedriver【linux\windows通用】

    Selenium测试时清理chromedriver[linux\windows通用] 我们平时在使用chromedriver驱动时会存在未完全清楚的现象 解决思路 1.打开chromedriver时记 ...

  7. linux win95模拟,Windows 95模拟器

    Windows 95模拟器是独立开发者所制作的一款软件,GitHub上面的大神将Windows95用软件的方式来进行还原,通过软件的形式你能够再一次的体验到在电脑上面运行Windows95的感觉,不需 ...

  8. 理解JVM如何使用Windows和Linux上的本机内存

    转至:http://www.chineselinuxuniversity.net/articles/23291.shtml 摘要:Java™ 堆耗尽并不是造成 java.lang.OutOfMemor ...

  9. windows和linux双系统

    像我们运维学习者,平常会用到linux,但是又必不可免的会用到windows,所以在一台电脑上安装linux和windows双系统就成了刚需,那么如何来安装windows和linux双系统呢 实验环境 ...

最新文章

  1. 插入DLL和挂接API——Windows核心编程学习手札之二十二
  2. Livemesh文件同步功能--使用图解
  3. OGRE 1.7.2 [Cthugha] 编译配置全过程方法
  4. linux下安装node.js
  5. ByteBuf主要继承关系图
  6. 2. Mysql数据库的入门知识
  7. 6大新品重磅发布,华为云全栈云原生技术能力持续创新升级
  8. 人工智能是一个工程问题,而不是魔术!
  9. struts2 文件上传下载注解示例
  10. 罗技鼠标驱动ghub怎么设置?
  11. 如何快速自学生物信息学
  12. 免费数据恢复软件恢复SanDisk丢失的资料
  13. 融资融券的交易成本有哪些?
  14. 技术工作总结报告安全性设计报告用户手册如何编写
  15. 电子与通信工程专硕考分_分享我的苏州大学电子与通信工程专硕考研经历
  16. 盘盈的存货一般应作为什么处理
  17. 面试数据库知识点总结
  18. 从零开始实现一个量化回测系统(一)
  19. Linux bc命令
  20. 笔记本电脑如何选购并安装内存条

热门文章

  1. python处理pdf实例_python实现pdf转word的例子
  2. linux 如何自定义安装路径,Linux下安装mysql并自定义数据的存储路径
  3. oracle简易数据库搭建,Oracle 10g 手工创建一个最简单的数据库
  4. android 控制流混淆 反向,AST混淆实战:仿obfuscator混淆控制流平坦化
  5. OpenShift 4 - 为客户端配置使用基于CA证书的kubeconfig实现无密码登录
  6. 使用WPF和.NET 6将Windows应用程序迁移到Windows on Arm
  7. (五)如何训练和测试AI语言翻译系统
  8. 使用Jenkins在Azure Web App上进行ASP.NET Core应用程序的持续集成和部署(CI/CD)–第4天
  9. 谷歌正在移除 Chrome 的“关闭其他选项卡”选项
  10. 微软宣布 SQL Server 2019 免费支持 Java