一起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
各位看官,关于关闭终端中的回显功能的例子咱们就说到这里。欲知后面还有什么例子,且听下回分解 。
推荐阅读
-
一起talk C栗子吧(第一百八十四回:C语言实例--在printf函数中设置输出宽度三)
-
一起talk C栗子吧(第一百七十五回:C语言实例--获取当前终端的行数和列数)
-
一起talk C栗子吧(第一百六十八回:C语言实例--C语言中的布尔--bool类型)
-
一起talk C栗子吧(第一百七十三回:C语言实例--关闭终端中的缓冲功能一)
-
一起talk C栗子吧(第一百六十五回:C语言实例--C语言中的常量)
-
一起talk C栗子吧(第五十八回:C语言实例--获取程序当前的工作路径)
-
一起talk C栗子吧(第一百五十八回:C语言实例--基于AF_INET域的流套接字通信)
-
一起talk C栗子吧(第一百七十二回:C语言实例--关闭终端中的回显功能三)
-
一起talk C栗子吧(第一百七十回:C语言实例--关闭终端中的回显功能一)
-
一起talk C栗子吧(第一百五十九回:C语言实例--基于AF_INET域的数据报套接字通信)