• 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; 
    }

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

  • 相关阅读:
    Linux文件与目录管理(一)
    Linux文件基本属性
    软工实践总结
    微软必应词典的调查与研究
    调研安卓开发环境的发展演变
    软件工程的预定目标
    学习进度第5周
    机械学习----KNN算法
    MyBatis:简介、第一个程序01(纯小白非常实用)
    解决数据库连接时区的问题
  • 原文地址:https://www.cnblogs.com/chencesc/p/4287755.html
Copyright © 2020-2023  润新知