Linux簡易彩色進(jìn)度條的實例代碼
在實現(xiàn)進(jìn)度條之前,我們需要先簡單了解一些知識:
一、緩沖區(qū):
緩沖區(qū)分為無緩沖、行緩沖、全緩沖。
無緩沖:表示的是沒有緩沖,可以將信息立馬顯現(xiàn)出來,典型代表是標(biāo)準(zhǔn)錯誤流stderr。
行緩沖:表示的是輸入輸出遇到換行才執(zhí)行真正的I/O操作。典型的代表是鍵盤的操作。
全緩沖:表示的是輸入輸出寫滿緩沖區(qū)才執(zhí)行I/O操作。典型的代表是磁盤的讀寫。
所以我們在實現(xiàn)的時候需要每次輸出完都需要使用fflush(stdout)將緩沖區(qū)刷新,以便下一次的輸出。
二、'\r'和 ‘\n'的區(qū)別:
回車用'\r'表示,表示的是回到這行的起始位置。換行用‘\n'表示,表示的是換行到下一行。所以我們在實現(xiàn)的時候需要用的是'\r',才能實現(xiàn)進(jìn)度條的效果。
三、如何彩色輸出:
終端的字符顏色由轉(zhuǎn)義序列控制,是文本模式下的系統(tǒng)顯示功能,與具體語言無關(guān)。轉(zhuǎn)義序列以控制字符'ESC'開頭。多數(shù)轉(zhuǎn)義序列超過兩個字符,故通常以'ESC'和左括號'[‘開頭。該起始序列稱為控制序列引導(dǎo)符,通常由'\033[‘或'\e[‘代替。
通過轉(zhuǎn)義序列設(shè)置終端顯示屬性時,可采用以下格式:
\033[ Param {;Param;…}m 或 \e[ Param {;Param;…}m
其中,'\033[‘或'\e[‘引導(dǎo)轉(zhuǎn)義序列,'m'表示設(shè)置屬性并結(jié)束轉(zhuǎn)義序列。Param為屬性值,{…}表示可選(多個參數(shù)之間用分號隔開,與順序無關(guān))。
在實現(xiàn)中為了增加可讀性可以我們可以將顏色定義為宏,再進(jìn)行使用。
注意:'\033[0m'用于恢復(fù)默認(rèn)的終端輸出屬性,否則會影響后續(xù)的輸出。
四、usleep()函數(shù):
usleep()函數(shù)的功能是把調(diào)用該函數(shù)的線程掛起一段時間 , 單位是微秒(即百萬分之一秒); 頭文件: unistd.h 語法: void usleep(int micro_seconds); 在實現(xiàn)過程中我們可以調(diào)用usleep()函數(shù)來實現(xiàn)每0.1s刷新進(jìn)度條的現(xiàn)象。
代碼實現(xiàn)如下:
#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; }
效果如下:
總結(jié)
以上所述是小編給大家介紹的Linux簡易彩色進(jìn)度條的實例代碼,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
ubuntu取消pppoe啟動時自動拔號的設(shè)置方法
昨晚用pppoe撥號,今早回公司發(fā)現(xiàn)原先的dhcp設(shè)置不生效了,所以取消pppoe啟動時自動拔號2008-09-09FreeBSD 6.0-RELEASE下建立高速DNS緩存服務(wù)器的方法
FreeBSD 6.0-RELEASE下建立高速DNS緩存服務(wù)器的方法...2007-05-05