• c 终端控制


    #include <stdio.h>
    #include <termios.h>
    #include <stdio.h>
    #include <unistd.h>
    #include <assert.h>
    #include <string.h>
    
    char my_getch()
    {
            int c=0;
            struct termios org_opts, new_opts;
            int res=0;
    
            res=tcgetattr(STDIN_FILENO, &org_opts);
            assert(res==0);
    
            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();
            res=tcsetattr(STDIN_FILENO, TCSANOW, &org_opts);
            assert(res==0);
            return c;
    }

    键盘输入不回显处理

    /×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××/

    #include <stdio.h>
    #include <stdlib.h>
    #include <termios.h>
    #include <curses.h>
    #include <term.h>
    #include <unistd.h>
    
    static int peek_character = -1; 
    
    int kbhit()
    {
        char ch;int x;
        int nread;
        struct termios old_settings,new_settings;
    
        tcgetattr(STDIN_FILENO,&old_settings);
        new_settings=old_settings;
        new_settings.c_lflag &=~(ICANON|ECHO|ECHOE|ECHOK|ECHONL|ECHOPRT|ECHOKE|ICRNL)  ;
        new_settings.c_cc [VMIN]=1  ;
        new_settings.c_cc [VTIME]=0  ;
        tcsetattr(STDIN_FILENO,TCSANOW,&new_settings);
    
        if(peek_character!=-1)
            x= 1;
        new_settings.c_cc [VMIN]=0  ;
        tcsetattr(STDIN_FILENO,TCSANOW,&new_settings);
    
        nread=read(0,&ch,1);
        new_settings.c_cc [VMIN]=1  ;
        tcsetattr(STDIN_FILENO,TCSANOW,&new_settings);
    
        if(nread==1) {
            peek_character=ch;
            x=1;
        }   
        else x=0;
        tcsetattr(STDIN_FILENO,TCSANOW,&old_settings);
        return x;
    }
    int readch()
    {
        char ch; 
    
        if(peek_character!=1) {
            ch=peek_character;
            peek_character=-1;
            return ch; 
        }   
        read(0,&ch,1);
        return ch; 
    }

    检测有键盘输入并返回键值

  • 相关阅读:
    vue脚手架搭建项目步骤(转载)
    使用css样式设置按钮禁用
    如何设置页面文本不可复制?
    System.IO.IOException:需要的特权不被客户端持有。
    vs中 git fetch与git pull的区别
    如何获取按钮开关选中的状态?
    Uncaught TypeError: XXX is not a function...
    解决bootstrap缩小布局会乱的问题,缩小一定程度后出现横向滚动条
    日期(年月日)与时间戳互转换
    Java中的Finally
  • 原文地址:https://www.cnblogs.com/chencesc/p/4287755.html
Copyright © 2020-2023  润新知