1. 程式人生 > >【Linux】彩色進度條的實現

【Linux】彩色進度條的實現

在寫進度條之前,我們首先應該知道以下幾個小問題: 

1.fflush

  在實現的時候,需要每次輸出完使用fflush(stdout)將緩衝區重新整理,以便下一次的輸出。

2.’\r’和 ‘\n’的區別:

(1):回車用’\r’表示,表示的是回到這行的起始位置。

(2):換行用‘\n’表示,表示的是換行到下一行。所以我們在實現時用的是’\r’,才能實現進度條的效果。

3.如何彩色輸出:

終端的字元顏色由轉義序列控制,是文字模式下的系統顯示功能,與具體語言無關。轉義序列以控制字元’ESC’開頭。多數轉義序列超過兩個字元,故通常以’ESC’和左括號’[‘開頭。該起始序列稱為控制序列引導符,通常由’\033[‘或’\e[‘代替。

通過轉義序列設定終端顯示屬性時,可採用以下格式:

\033[ Param {;Param;…}m 或 \e[ Param {;Param;…}m

其中,’\033[‘或’\e[‘引導轉義序列;’m’表示設定屬性並結束轉義序列。Param為屬性值,{…}表示可選(多個引數之間用分號隔開,與順序無關)。

顯示序列:
\033[0m           關閉轉義序列
\033[1m           粗體或高亮
\033[5m           閃爍
前景顏色序列:
\033[30m          黑
\033[31m          紅
\033[32m          綠
\033[33m          黃
\033[34m          藍
\033[35m          洋紅
\033[36m          青
\033[37m          白

在實現中為了增加可讀性可以我們將顏色定義為巨集,再進行使用。

注意:’\033[0m’用於恢復預設的終端輸出屬性,否則會影響後續的輸出。

4.usleep()函式:

usleep()函式的功能是把呼叫該函式的執行緒掛起一段時間 , 單位是微秒(即百萬分之一秒);

標頭檔案: unistd.h

語法: void usleep(int micro_seconds);

在實現過程中我們可以呼叫usleep()函式來實現每0.1s重新整理進度條的現象。
 

具體程式實現如下:

寫完之後儲存退出,就會有以下效果: