您的位置:首页 > 编程语言 > C语言/C++

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

2016-07-07 23:40 435 查看
各位看官们,大家好,上一回中咱们说的是关闭终端中回显功能的例子,这一回咱们说的例子是:关闭终端中的缓冲功能 。闲话休提,言归正转。让我们一起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


各位看官,关于关闭终端中的回显功能的例子咱们就说到这里。欲知后面还有什么例子,且听下回分解 。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: