一起talk C栗子吧(第一百七十三回:C语言实例--关闭终端中的缓冲功能一)


各位看官们,大家好,上一回中咱们说的是关闭终端中回显功能的例子,这一回咱们说的例子是:关闭终端中的缓冲功能 。闲话休提,言归正转。让我们一起talk C栗子吧!


看官们,我们今天介绍的是关闭终端中的缓冲功能,首先介绍一下什么是缓冲功能。当我们在终端中输入字符时终端没有立即获取到该字符,而是把它存放在了一个缓冲区域中,直到在终端中输入回车键后,该字符才会被终端获取,这就是缓冲功能。它和回显功能一样,给我们带来了很多方便,比如我们输入到终端的内容有错误时还可以进行修改,因为这时修改的是缓冲区中的内容,而不是终端最后获取的内容。

有时候,我们不想使用缓冲,而是想在终端中输入字符后立即获取终端中的字符。比如我们在Linux系统中查阅man手册时,只要输入q,不需要按下回车键立即退出man手册。这个时候终端关闭了缓冲功能,那么终端是如何关闭缓冲功能的呢?这便是我们今天的主题。

大家还记得我们关闭回显功能时使用的stty的命令吗?我们可以通过该命令来关闭终端的缓冲功能,具体的命令是:

  • stty -icanon //关闭终端的缓冲功能
  • stty icanon //打开终端的缓冲功能

光说不练,不是我们的风格,接下来我们通过具体的例子来演示一下:

talk8$cat -         //该命令表示把标准输入的内容通过标准输出显示出来
a                   //我先输入了字符a,然后按下回车键
a                   //这时显示刚才输入的字符,也就是按下回车键后执行“cat -”命令的结果
^C                  //通过ctrl+c结束该命令
talk8$ stty -icanon  //输入命令,关闭终端的缓冲功能
cat -                //再次执行cat命令
aa                   //我先输入了字符a,还没有按下回车键终端中就输出了刚才输入的字符a
                    //要注意,这里有两个a,第一个a是我们手动输入到终端的,第二个a是终端运行cat命令后输出的结果
^C                  //通过ctrl+c结束该命令
talk8$ stty icanon  //输入命令,恢复终端的缓冲功能

明白该命令后,我们看看如何在C程序中使用该功能。类似关闭回显功能一样,我们使用system()函数来关闭缓冲功能。接下来我们通过具体的代码来演示该函数的用法:

    //源代码
    printf("please input a charater \n");
    system("stty -icanon"); // close the buffer functoin

    ch = getchar();
    if(ch)
        printf(" \ninput is : %c \n",ch); // show \n firstly

    system("stty icanon"); // open the buffer function

看官们,以上是核心代码,完整的代码放到了我的资源中,大家可以点击这里下载使用。

下面是程序的运行结果,请大家参考:

--- buffer function is open ---
please input a charater 
a                           //这里需要按下回车键后程序才会运行到下一步
input is : a 
--- buffer function is closed ---
please input a charater 
a                           //这里不需要按下回车键,关闭缓冲功能后程序会立即运行到下一步
input is : a 

各位看官,关于关闭终端中的回显功能的例子咱们就说到这里。欲知后面还有什么例子,且听下回分解 。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

talk_8

真诚赞赏,手有余香

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值