一起talk C栗子吧(第一百七十四回:C语言实例--关闭终端中的缓冲功能二)
程序员文章站
2022-03-03 09:08:53
各位看官们,大家好,上一回中咱们说的是关闭终端中缓冲功能的例子,这一回咱们继续说该例子。闲话休提,言归正转。让我们一起talk c栗子吧!
看官们, 我们在上一回中介绍了如何关闭终端中的缓冲功能...
各位看官们,大家好,上一回中咱们说的是关闭终端中缓冲功能的例子,这一回咱们继续说该例子。闲话休提,言归正转。让我们一起talk c栗子吧!
看官们, 我们在上一回中介绍了如何关闭终端中的缓冲功能,当时是借助命令stty实现该功能的,这一回中我们将介绍另外一种关闭终端中回显功能的方法。该方法是通过终端的termios接口来操作终端的。关于termios接口的介绍和编程接口,我们在一百七十一回中介绍过了,因此,我们直接介绍如何通过termios编程接口来关闭终端缓冲功能。
下面是详细的操作步骤,请大家参考:
1.使用函数tcgetattr()
获取终端中的配置信息,并且备份该信息,以便恢复终端最初的配置时使用; 2.修改步骤1中获取到的终端配置信息,我们修改的是与缓冲功能相关的配置; 3.结合步骤2中修改后的终端配置信息,然后使用函数tcsetattr()
修改终端中的配置信息; 4.使用备份的终端配置信息,回复终端最初的配置,这时也会用到函数tcsetattr()
;
看官们,该步骤是不是看着有种似曾相识感觉?哈哈,其实该步骤和关闭回显功能的步骤十分类似,步骤中只有一点不同,那就是在步骤2中修改的内容不同。
下面是具体的代码,请大家参考:
//源代码 tcgetattr(fd,&init_setting); //get the setting of terminal change_setting = init_setting; //backup the setting of terminal change_setting.c_lflag &= ~icanon; //close buffer function by change bit of icanon printf("--- buffer function is closed ---\n"); printf("please input a charater \n"); res = tcsetattr(fd,tcsaflush,&change_setting); //change the setting of terminal ch = getchar(); if(0 != ch) { tcsetattr(fd,tcsanow,&init_setting); //revert the setting of terminal printf("\ninput is : %c \n",ch); //show \n firstly }
代码中有一个文件描述符fd,我们可以通过fileno()函数从流中获取流的文件描述符。此外,我们在修改终端配置信息时使用了前面章回中的方法:使用了位操作“与”把终端配置信息中的icanon值删除掉。此外,我们在修改终端配置信息时使用了两种修改方式:tcsaflush和tcsanow
。这两种修改方式在前面章回中已经介绍过,这里不做详细介绍。
看官们,以上是核心代码,完整的代码放到了我的资源中,大家可以下载使用。
下面是程序的运行结果,请大家参考:
--- buffer function is open --- please input a charater a //缓冲功能处于打开状态,这时需要按下回车键才能从终端中获取字符 input is : a --- buffer function is closed --- please input a charater a //缓冲功能处于关闭状态,这时不需要按下回车键就能从终端中获取字符 input is : a
各位看官,关于关闭终端中缓冲功能的例子咱们就说到这里。欲知后面还有什么例子,且听下回分解 。
上一篇: String Manipulation
下一篇: C++11时间日期库chrono的使用
推荐阅读
-
一起talk C栗子吧(第一百七十五回:C语言实例--获取当前终端的行数和列数)
-
一起talk C栗子吧(第一百七十三回:C语言实例--关闭终端中的缓冲功能一)
-
一起talk C栗子吧(第一百七十二回:C语言实例--关闭终端中的回显功能三)
-
一起talk C栗子吧(第一百七十回:C语言实例--关闭终端中的回显功能一)
-
一起talk C栗子吧(第一百七十四回:C语言实例--关闭终端中的缓冲功能二)
-
一起talk C栗子吧(第一百七十一回:C语言实例--关闭终端中的回显功能二)
-
一起talk C栗子吧(第一百七十五回:C语言实例--获取当前终端的行数和列数)
-
一起talk C栗子吧(第一百七十三回:C语言实例--关闭终端中的缓冲功能一)
-
一起talk C栗子吧(第一百七十二回:C语言实例--关闭终端中的回显功能三)
-
一起talk C栗子吧(第一百七十回:C语言实例--关闭终端中的回显功能一)