各位看官們,大家好,上一回中咱們說的是關閉終端中緩沖功能的例子,這一回咱們繼續說該例子。閒話休提,言歸正轉。讓我們一起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
各位看官,關於關閉終端中緩沖功能的例子咱們就說到這裡。欲知後面還有什麼例子,且聽下回分解 。