Linux下彩色進度條的實現

2021-08-13 01:39:13 字數 1181 閱讀 9375

在linux下安裝軟體的過程中會出現乙個進度條,它通過動態增加一些符號來表示安裝進度。今天我們就來模擬實現一下乙個進度條。

在實現進度條之前,首先需要了解一些概念。

一.緩衝區

緩衝區分為三種:無緩衝,行緩衝和全緩衝。

無緩衝:指沒有緩衝,立即顯示資訊。

行緩衝:輸入輸出遇到換行符才進行io操作。

全緩衝:輸入輸出寫滿緩衝區才進行io操作。

我們在實現乙個進度條的時候,如果每次輸出符號的時候不重新整理緩衝區,就不會立即輸出符號,而是進入sleep函式,這樣的效果就不好了。所以在每次輸出完的時候,都需要用fflush(stdout)重新整理緩衝區,以便執行下一次的輸出。

二. 「\r」和」\n」的區別

\r表示回車,表示回到這行的開始位置,\n表示換行,表示換到下一行的起始位置。我們在實現進度條的時候,希望進度條在一行中顯示出來,而不是在多行顯示出來,所以我們在這裡需要用的是\r。

三.彩色的實現

終端的字元顏色的控制由轉義字元實現。通過轉義序列顯示終端的顏色通常以「\033[」開頭,以m來表示轉義序列結束。但最重要的是我們在輸出完之後要用「\033[0m」來關閉所有屬性,否則之後的輸出也會變成所設定的顏色。下面只列出本次**所用到的轉義屬性。

\033[0m ——>關閉所有屬性

\033[34m ——>設定前景色為藍色(30-37為前景色)

四.具體實現方法

這裡我們用「#」來作為進度條載入的符號,一般來說載入的過程都是從0%到100%,所以我們需要有101個空間來存放0-100個「#」,再加上末尾的\0結束標誌,總共是102個空間,我們定義乙個字元陣列bar[102]來存放我們的標記。我們還可以再末尾用一串旋轉看起來動態旋轉的字串「|-/」來讓這個過程更具有動感。當然了,我們還需要乙個時間間隔來控制每次輸出的時間。sleep的單位是s,usleep的單位是微秒(百萬分之一秒),為了更快的實現,這裡我們使用usleep(100000),表示每0.1s輸出乙個字元。

下面附上**

#include 

#include

#include

int main()

printf("\n");

return

0;}

Linux下彩色進度條的實現

實現乙個彩色進度條的前提是要了解linux下如何改變shell的輸出顏色,shell的輸出顏色改變是通過轉義序列完成的。多數轉義序列以控制字元 esc 和左中括號 開頭。該起始序列稱為控制序列引導符,通常由 033 或 e 代替 通過轉義序列設定終端顯示屬性時,採用以下格式 033 屬性m 或 e ...

Linux下彩色進度條

回車與換行 緩衝區概念 乙個緩衝區物件是固定數量的資料的容器,其作用是乙個儲存器 記憶體 或者分段運輸區,在這裡資料可被儲存並在之後用於檢索。緩衝區可分為 全緩衝,行緩衝,不帶緩衝 全緩衝 當填滿標準io的快取後才進行實際io操作。windows和linux都可以通過給 mode設為 iofbf設定...

Linux下簡易彩色進度條

個人部落格傳送門 前言在linux下安裝檔案的時候,都會有個進度條來提示我們安裝的進度是多少。這裡我們模擬輸出這個進度條。主要用到輸出函式的操作 緩衝區的重新整理 usleep函式 linux終端顏色的顯示等知識。效果如下 鋪墊知識點 緩衝區 緩衝區分位三種 無緩衝,行緩衝,全緩衝。無緩衝 沒有緩衝...