在實現進度條之前,我們需要先簡單了解一些知識:
一、緩沖區:
緩沖區分為無緩沖、行緩沖、全緩沖。
無緩沖:表示的是沒有緩沖,可以將信息立馬顯現出來,典型代表是標準錯誤流stderr。
行緩沖:表示的是輸入輸出遇到換行才執行真正的I/O操作。典型的代表是鍵盤的操作。
全緩沖:表示的是輸入輸出寫滿緩沖區才執行I/O操作。典型的代表是磁盤的讀寫。
所以我們在實現的時候需要每次輸出完都需要使用fflush(stdout)將緩沖區刷新,以便下一次的輸出。
二、'/r'和 ‘/n'的區別:
回車用'/r'表示,表示的是回到這行的起始位置。換行用‘/n'表示,表示的是換行到下一行。所以我們在實現的時候需要用的是'/r',才能實現進度條的效果。
三、如何彩色輸出:
終端的字符顏色由轉義序列控制,是文本模式下的系統顯示功能,與具體語言無關。轉義序列以控制字符'ESC'開頭。多數轉義序列超過兩個字符,故通常以'ESC'和左括號'[‘開頭。該起始序列稱為控制序列引導符,通常由'/033[‘或'/e[‘代替。
通過轉義序列設置終端顯示屬性時,可采用以下格式:
/033[ Param {;Param;…}m 或 /e[ Param {;Param;…}m其中,'/033[‘或'/e[‘引導轉義序列,'m'表示設置屬性并結束轉義序列。Param為屬性值,{…}表示可選(多個參數之間用分號隔開,與順序無關)。
在實現中為了增加可讀性可以我們可以將顏色定義為宏,再進行使用。
注意:'/033[0m'用于恢復默認的終端輸出屬性,否則會影響后續的輸出。
四、usleep()函數:
usleep()函數的功能是把調用該函數的線程掛起一段時間 , 單位是微秒(即百萬分之一秒); 頭文件: unistd.h 語法: void usleep(int micro_seconds); 在實現過程中我們可以調用usleep()函數來實現每0.1s刷新進度條的現象。
代碼實現如下:
#include <stdio.h>#include <unistd.h>#include <string.h>#define NONE "/e[0m"#define RED "/e[0;31m"#define BLUE "/e[0;34m"int main(){ int index = 0; char str[21]; memset(str,'/0',sizeof(str)); char tmp[5] = {'-','//','|','/','/0'}; while(index <=20) { str[index] = '#'; if(index <=10) printf(RED"%s[%d%%%c]/r"NONE,str,index*5,tmp[index%4]); else printf(BLUE"%s[%d%%%c]/r"NONE,str,index*5,tmp[index%4]); fflush(stdout); index++; usleep(100000); } printf("/n"); return 0;}效果如下:

總結
以上所述是小編給大家介紹的Linux簡易彩色進度條的實例代碼,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網之家網站的支持!
新聞熱點
疑難解答