程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> 關於C >> 一起talk C栗子吧(第一百七十四回:C語言實例

一起talk C栗子吧(第一百七十四回:C語言實例

編輯:關於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 

各位看官,關於關閉終端中緩沖功能的例子咱們就說到這裡。欲知後面還有什麼例子,且聽下回分解 。


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved