Linux终端设置

 近日,项目涉及终端输入的问题,要不阻塞的情况下轮询串口,还要屏蔽掉 ctrl-c 等特殊键。

查了下资料,现在终端输入是有分规范和不规范两类的(canonical and noncanonical)。

  • canonical : 输入以 \n EOF或者 EOL 字符串结束,就是串口想获取某键值的话,最后要敲个回车。
  • nocanonical: 输入就可以获取键值。不要敲回车也可以读到。

其他的就好办了。

  • 获取终端属性  tcgetattr
  • 设置终端属性  tcsetattr

设置一下属性,基本都要可以找到所需要的功能了。


附上一小段code:

int get_custom_char(void)
{
    struct termios org_opts, new_opts;
    int c;
    int ret;

    /* store old settings */
    ret = tcgetattr(STDIN_FILENO, &org_opts);
    if (ret != 0) {
        goto err;
    }

    memcpy(&new_opts, &org_opts, sizeof(new_opts));
    new_opts.c_lflag &= ~(ICANON | ECHO | ECHOE | ECHOK | ECHONL | ECHOPRT | ECHOKE | ICRNL);

    /* ctrl-q */
    new_opts.c_cc[VSTART] = 0;
    /* ctrl-s */
    new_opts.c_cc[VSTOP] = 0;
    /* ctrl-z */
    new_opts.c_cc[VSUSP] = 0;
    /* ctrl-c */
    new_opts.c_cc[VINTR] = 0;
    
    /* set new terminal parms */
    ret = tcsetattr(STDIN_FILENO, TCSANOW, &new_opts);
    if (ret != 0) {
        goto err;
    }

    c = getchar();
    /* restore old settings */
    ret = tcsetattr(STDIN_FILENO, TCSANOW, &org_opts);
    if (ret != 0) {
        goto err;
    }

    return c;

err:
    return -1;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值