使用static关键字保存和恢复程序运行状态

今天做了一个控制Linux终端状态的实验,程序运行过程中,终端需要调整到 nobuffer、noecho。即,无缓冲,无回显状态。并且一次仅能接受一个字符的输入。

实现如下:

int set_cr_noecho_mode()
{
    struct  termios  ttystate;
    tcgetattr(0, &ttystate);   // read current setting
    ttystate.c_lflag    &= ~ICANON;   //no buffering
    ttystate.c_lflag    &= ~ECHO;    //no echo 
    ttystate.c_cc[VMIN]   =   1;   //  get 1 char at a time
    tcsetattr(0, TCSANOW,  &ttystate);  // install setting
}

 为了在这些设置使用过后,能恢复终端在次之前的状态,必须对其状态进行保存,使用一个static变量就可以轻松解决!这个方法,同样适用于很多临时改变状态,并且需要恢复的情况。

int tty_mode(int how)
{
    static struct termios original_mode;
    static int original_flags;
 
    if(how == 0)
    {
        //save
        tcgetaddr(0, &original_mode);      
        original_flags = fcntl(0, F_GETFL);
     }
    else
    {
       //restore
        tcsetattr(0, TCSANOW, &original_mode);
        fcntl(0, F_SETFL, original_flags);
    }
}

 


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值