欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-08-11 14:03:44
各位看官们,大家好,上一回中咱们说的是关闭终端中回显功能的例子,这一回咱们说的例子是:关闭终端中的缓冲功能 。闲话休提,言归正转。让我们一起talk 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 

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