zoukankan      html  css  js  c++  java
  • Linux 退格键不回显

    在程序使用system("stty erase ^H");可以实现在输入状态下,按退格键删除字符,不回显。
    
    调用tcsetattr修改linux基本输入的控制字符定义
    //Linux下退格键不回显
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <unistd.h>
    #include <errno.h>
    #include <termios.h>
    
    int main(int arg,char *args[])
    {
        /*
         * 第一种方法
         * */
        //system("stty erase ^H");
        /*
         * 第二种方法
         * */
        struct termios term;
        memset(&term,0,sizeof(term));
        /*
         * 获取系统当前termios设置
         * */
        if(tcgetattr(STDIN_FILENO,&term)==-1)
        {
            printf("tcgetattr() failed ! error message:%s
    ",strerror(errno));
            return -1;
        }
        /*
         term.c_lflag &= ~ICANON;//取消ICANON选项(不规范输入)
         term.c_lflag != ICANON;//设置ICANON选项(规范输入)
         term.c_cc字段为要设置的具体特殊输入字符,如term.c_cc[VERASE]代表退格键
         term.c_cc[VERASE]='';意思是擦除一个字符用退格键表示
         VERASE代表向前擦出一个字符,VINTR代表发送 ctrl + C中断信号,ctrl + C的ASCII码为3
         例如term.c_cc[VINTR]='	';意思是将tab键设置为中断信号
         tcsetattr中,第二个参数说明--
         TCSAFLUSH:发送了所有输出后更改才生效,在更改发生时,未读取得所有输入数据都被删除
         TCSANOW:更改立即生效
         TCSADRAIN:发送了所有输出后更改才发生,如果更改输出参数则应该使用该选项
          */
        term.c_cc[VERASE]='';//''为退格键的ASCII码
        if(tcsetattr(STDIN_FILENO,TCSANOW,&term)==-1)
        {
            printf("tcsetattr() failed ! error message:%s
    ",strerror(errno));
                    return -1;
        }
        return 0;
    }
  • 相关阅读:
    EFCore数据库迁移命令
    EF基本操作
    EF执行存储过程
    [vue]element-ui使用
    [vue]vue-router的使用
    [vue]使用webpack打包
    [vue]插槽与自定义事件
    [vue]计算属性
    [vue]axios异步通信
    [vue]组件
  • 原文地址:https://www.cnblogs.com/zhanggaofeng/p/6044947.html
Copyright © 2011-2022 走看看