zoukankan      html  css  js  c++  java
  • linux系统kbhit的几种实现

    一,用select

    #include <stdio.h>
    #include <termios.h>
    #include <unistd.h>
    #include <sys/types.h>
    #include <sys/time.h>

    void changemode(int);
    int kbhit(void);
    int main(void)
    {
    int ch;
    changemode(1);
    while ( !kbhit() )
    {
    putchar('.');
    }

    ch = getchar();

    printf("\nGot %c\n", ch);

    changemode(0);
    return 0;
    }

    void changemode(int dir)
    {
    static struct termios oldt, newt;

    if ( dir == 1 )
    {
    tcgetattr( STDIN_FILENO, &oldt);
    newt = oldt;
    newt.c_lflag &= ~( ICANON | ECHO );
    tcsetattr( STDIN_FILENO, TCSANOW, &newt);
    }
    else
    tcsetattr( STDIN_FILENO, TCSANOW, &oldt);
    }

    int kbhit (void)
    {
    struct timeval tv;
    fd_set rdfs;

    tv.tv_sec = 0;
    tv.tv_usec = 0;

    FD_ZERO(&rdfs);
    FD_SET (STDIN_FILENO, &rdfs);

    select(STDIN_FILENO+1, &rdfs, NULL, NULL, &tv);
    return FD_ISSET(STDIN_FILENO, &rdfs);

    }

     

    二,用非阻塞io

    #include <stdio.h>

    #include <termios.h>

    #include <unistd.h>

    #include <fcntl.h>

    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(void)

    {

    while(!kbhit())

    puts("Press a key!");

    printf("You pressed '%c'!/n", getchar());

    return 0;

    }

     

  • 相关阅读:
    C# 操作XML
    js把字符串(yyyymmdd)格式转换成日期格式(yyyy-mm-dd)
    解析GZIP压缩的网页
    访问修饰符
    c# 多态中 Virtual与override的作用
    C# 中 ref 和out 的区别
    C# .net 中文手册地址
    js获取URL参数
    几种Css前端框架资料
    android 检查能否上网
  • 原文地址:https://www.cnblogs.com/xiayong123/p/3717262.html
Copyright © 2011-2022 走看看