`
pipal
  • 浏览: 163784 次
  • 性别: Icon_minigender_1
  • 来自: 南宁
社区版块
存档分类
最新评论

Linux下模拟getch()

阅读更多

那天写个程序,突然用到TC下的getch()函数,用以即时捕获键盘的输入,但Linux下是没有这个函数的,没办法,只能模拟这个函数。这个函数必须设置终端的属性,关于Linx下的编程,我已经忘记得差不多了,感慨啊。只能从网上求助大牛了,以下程序是一大牛写的,实现了该功能。

 

#include <stdio.h>
#include <termios.h>
#include <unistd.h>
#include <assert.h>
#include <string.h>

int getch(void);

int main(void)
{
        char ch;
        printf("Input a char:");
        fflush(stdin);
        ch = getch();
        printf("\nYou input character is: %c\n", ch);
        return 0;
}

int getch(void)
{
        int c=0;
        struct termios org_opts, new_opts;
        int res=0;
        //-----  store old settings -----------
        res=tcgetattr(STDIN_FILENO, &org_opts);
        assert(res==0);
        //---- set new terminal parms --------
        memcpy(&new_opts, &org_opts, sizeof(new_opts));
        new_opts.c_lflag &= ~(ICANON | ECHO | ECHOE | ECHOK | ECHONL | ECHOPRT | ECHOKE | ICRNL);
        tcsetattr(STDIN_FILENO, TCSANOW, &new_opts);
        c=getchar();
            //------  restore old settings ---------
        res=tcsetattr(STDIN_FILENO, TCSANOW, &org_opts);assert(res==0);
        return c;
}

 

 

代码出自:http://topic.csdn.net/u/20080417/16/6f0b781c-287a-485c-b370-7c62953c2193.html

感谢这位大牛。

0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics