各位看官們,大家好,上一回中咱們說的是關閉終端中緩沖功能的例子,這一回咱們說的例子是:獲取當前終端的行數和列數 。閒話休提,言歸正轉。讓我們一起talk C栗子吧!
看官們,我們在前面章回中介紹了termios相關的信息,以及termios提供的編程接口,通過這些接口可以操作終端,今天我們再介紹一些操作終端的編程接口,通過這些接口可以獲取當前終端的行數和列數,這便是我們今天的主題。
int setupterm(char *term, int fd, int *errret);
該函數用來修改當前終端的類型 該函數的第一個參數是char*類型的指針,函數使用它指向的值來修改終端類型; 該函數的第二個參數是文件描述符,通過它可以修改終端類型; 該函數的第三個參數是一個指針,用來保存函數運行的結果; 該函數運行成功時返回1,失敗時返回-1或者0.其中-1表示沒有終端信息,0表示有終端信息,但是沒有匹配的終端;
通常情況下,第一個參數使用空指針,這樣就表示獲取當前終端的類型;第三個參數也經常使用空指針,這樣只需要查看函數的返回值就可以。
int tigetnum(char * capname);
該函數用來獲取終端中與數值相關的值; 該函數的參數表示與終端中某個數值對應的名字; 該函數運行成功時返回終端中的與參數對應的數值,否則返回-2;
關於該函數的參數,我們可以使用終端中與行數和列數相對的名字:lines和cols。這樣就可以獲取到當前終端的行數和列數。我這麼一說,看官們是不是想馬上動手實現一下?接下來讓我們一起動手吧!
res = setupterm(NULL,fileno(stdout),NULL);
row_count = tigetnum("lines");
col_count = tigetnum("cols");
printf("Terminal row:%d \n",row_count);
printf("Terminal colum:%d \n",col_count);
我們在代碼中首先獲取了當前終端中的類型,然後繼續獲取當前終端的行數和列數,這樣便實現的我們的目標。
看官們,以上是核心代碼,完整的代碼放到了我的資源中,大家可以下載使用。
下面是程序的運行結果,請大家參考:
Terminal row:56
Terminal colum:113
該結果顯示的是我正在使用的終端行數和列數,大家運行時可能會有不同的結果,這個是正確的,因為不同的終端擁有不同的行數和列數。正所謂世界上沒有兩片相同的葉子,世界上也沒有兩個相同的終端,哈哈。此外,在編譯時需要手動鏈接ncurses庫,因為這些接口使用了該庫中的內容,具體的命令如下:
gcc GetLineCol1.c -o end -lncurses
各位看官,關於獲取當前終端行數和列數的例子咱們就說到這裡。欲知後面還有什麼例子,且聽下回分解 。