linux系统下取代conio.h中getch()的方式,针对不需Enter可以直接读取

在写多线程下,利用读取到“ESC”按键时直接终止所有程序时,需要用到。

网上查找到的方式是使用getch()函数,但是它所在的头文件在getch()中不可用(但现在最新好像可以用了,或者是有资源的),寻找替代的方式,但是网上的替代方式 基本都是针对读取字符不回显,在这里也给出链接:https://blog.csdn.net/weixin_33713707/article/details/85736998

 

但是这个方式不能解决多线程下,主线程读取到字符立马退出程序的效果,下面给出替代方式:

void * watch(void *data)
    107 {
    108     while(1)
    109     {
    110         system("stty raw");
    111         char c = getchar();
    112         system("stty cooked");
    113         if(c == 27)
    114         {
    115             printf("get the esc, end!\n");
    116             exit(0);
    117         }
    118 
    119     }
    120 
    121     return NULL;
    122 }

原理:stty raw是终端进入一字符一读入的模式

          stty cooked是回到一行一读入的模式

但是,这个方式目前有bug,就是这样会导致控制台的输出会出现混乱(几率问题,有时按下esc后可以看到终端输出是正常的),未解决。。。


关于多线程,这个读取到esc立即退出程序的线程必须放在第一位,否则无效。

下附文件。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值