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;

    }

     

  • 相关阅读:
    caption标签,为表格添加标题和摘要
    用css样式,为表格加入边框
    table标签,认识网页上的表格
    给div命名,使逻辑更加清晰
    认识div在排版中的作用
    使用ol,添加图书销售排行榜
    使用ul,添加新闻信息列表
    关于tableView在滚动时存在的偏移量问题
    跳转到微信扫一扫
    文件下载的缓存策略
  • 原文地址:https://www.cnblogs.com/xiayong123/p/3717261.html
Copyright © 2011-2022 走看看