Linux實現進度條小程式
進度條:
進度條即計算機在處理任務時,實時的,以圖片形式顯示處理任務的速度,完成度等剩餘未完成任務量的大小,和可能需要處理時間,一般以長方形條狀顯示。日常生活中,下載,複製等等操作,我們都會見到進度條的身影。
所以今天在cent os環境下的Linux實現一個簡單的進度條。
那麼工欲善其事必先利其器,我們先來了解一下幾點基礎知識。
1. 我們想做一個怎麼樣的進度條?
我們做的進度條是一個方括號不動 方括號裡逐漸填充#的一個進度條
那麼 我們就需要固定一個長度 向其中新增東西
我們就需要用到 printf(“[-100s%]”,buf);這裡的100是規定長度但是100是從右向左輸出 所以我們用到-100
2. 進度條怎麼處理進度增加?
這裡 我們需要知道回車和換行的知識 回車和換行是不一樣的
回車指的是回到一行的首部
換行指的是換到下一行
那麼我們如果需要讓進度條逐漸增加 我們就僅僅只需要回車這一個功能
在C語言裡回車是 /r
3. 進度條如何緩慢顯示?
毫無疑問 這裡需要用(秒為單位)sleep/usleep(微秒為單位)函式
但是 當我們先列印再用usleep時 我們發現它並沒有先列印 而是隔了一段時間後全部顯示
所以 我們還需要了解緩衝區
緩衝區分為無緩衝、行緩衝、全緩衝。
無緩衝:表示的是沒有緩衝,可以將資訊立馬顯現出來,典型代表是標準錯誤流stderr。
行緩衝:表示的是輸入輸出遇到換行才執行真正的I/O操作。典型的代表是鍵盤的操作。
全緩衝:表示的是輸入輸出寫滿緩衝區才執行I/O操作。典型的代表是磁碟的讀寫。
根據馮諾依曼思想 cpu處理完放到記憶體中 記憶體之後才會輸出到輸出裝置上 所以我們需要重新整理stdout
printf是一個行緩衝函式,先寫到緩衝區,滿足條件後,才將緩衝區刷到對應檔案中,
刷緩衝區的條件如下:
滿足上面4個條件之一緩衝區就會重新整理(1)緩衝區填滿;
(2)寫入的字元中有‘\n’;
(3)呼叫fflush手動重新整理緩衝區;
(4)呼叫scanf要從緩衝區中讀取資料時,也會將緩衝區內的資料重新整理;
所以我們應該用fflush函式重新整理緩衝區以便讓他立馬顯示到螢幕上
那麼 我們解決完這些問題 我們就開工 開始寫一個簡單的進度條小程式
那麼剩下的不贅述
建loading.c 和 Makefile檔案
loading.c:
Makefile :
之後我們執行並檢視結果