【Linux】彩色進度條的實現
阿新 • • 發佈:2019-01-07
在寫進度條之前,我們首先應該知道以下幾個小問題:
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重新整理進度條的現象。
具體程式實現如下:
寫完之後儲存退出,就會有以下效果: