Linux簡(jiǎn)易彩色進(jìn)度條的實(shí)例代碼
在實(shí)現(xiàn)進(jìn)度條之前,我們需要先簡(jiǎn)單了解一些知識(shí):
一、緩沖區(qū):
緩沖區(qū)分為無(wú)緩沖、行緩沖、全緩沖。
無(wú)緩沖:表示的是沒(méi)有緩沖,可以將信息立馬顯現(xiàn)出來(lái),典型代表是標(biāo)準(zhǔn)錯(cuò)誤流stderr。
行緩沖:表示的是輸入輸出遇到換行才執(zhí)行真正的I/O操作。典型的代表是鍵盤的操作。
全緩沖:表示的是輸入輸出寫滿緩沖區(qū)才執(zhí)行I/O操作。典型的代表是磁盤的讀寫。
所以我們?cè)趯?shí)現(xiàn)的時(shí)候需要每次輸出完都需要使用fflush(stdout)將緩沖區(qū)刷新,以便下一次的輸出。
二、'\r'和 ‘\n'的區(qū)別:
回車用'\r'表示,表示的是回到這行的起始位置。換行用‘\n'表示,表示的是換行到下一行。所以我們?cè)趯?shí)現(xiàn)的時(shí)候需要用的是'\r',才能實(shí)現(xiàn)進(jìn)度條的效果。
三、如何彩色輸出:
終端的字符顏色由轉(zhuǎn)義序列控制,是文本模式下的系統(tǒng)顯示功能,與具體語(yǔ)言無(wú)關(guān)。轉(zhuǎn)義序列以控制字符'ESC'開(kāi)頭。多數(shù)轉(zhuǎn)義序列超過(guò)兩個(gè)字符,故通常以'ESC'和左括號(hào)'[‘開(kāi)頭。該起始序列稱為控制序列引導(dǎo)符,通常由'\033[‘或'\e[‘代替。
通過(guò)轉(zhuǎn)義序列設(shè)置終端顯示屬性時(shí),可采用以下格式:
\033[ Param {;Param;…}m 或 \e[ Param {;Param;…}m
其中,'\033[‘或'\e[‘引導(dǎo)轉(zhuǎn)義序列,'m'表示設(shè)置屬性并結(jié)束轉(zhuǎn)義序列。Param為屬性值,{…}表示可選(多個(gè)參數(shù)之間用分號(hào)隔開(kāi),與順序無(wú)關(guān))。
在實(shí)現(xiàn)中為了增加可讀性可以我們可以將顏色定義為宏,再進(jìn)行使用。
注意:'\033[0m'用于恢復(fù)默認(rèn)的終端輸出屬性,否則會(huì)影響后續(xù)的輸出。
四、usleep()函數(shù):
usleep()函數(shù)的功能是把調(diào)用該函數(shù)的線程掛起一段時(shí)間 , 單位是微秒(即百萬(wàn)分之一秒); 頭文件: unistd.h 語(yǔ)法: void usleep(int micro_seconds); 在實(shí)現(xiàn)過(guò)程中我們可以調(diào)用usleep()函數(shù)來(lái)實(shí)現(xiàn)每0.1s刷新進(jìn)度條的現(xiàn)象。
代碼實(shí)現(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簡(jiǎn)易彩色進(jìn)度條的實(shí)例代碼,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
解析ubuntu tab鍵不能自動(dòng)補(bǔ)全命令的參數(shù)
這篇文章主要介紹了ubuntu tab鍵不能自動(dòng)補(bǔ)全命令的參數(shù),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-03-03
從Windows轉(zhuǎn)向Linux教程 E3000基礎(chǔ)學(xué)習(xí)
從Windows轉(zhuǎn)向Linux教程 E3000基礎(chǔ)學(xué)習(xí)...2007-11-11
分布式監(jiān)控系統(tǒng)Zabbix3.2添加自動(dòng)發(fā)現(xiàn)磁盤IO并注冊(cè)監(jiān)控(推薦)
zabbix自帶的“Template OS Linux”模板可自動(dòng)發(fā)現(xiàn)磁盤并監(jiān)控空間利用率,小編這次介紹分布式監(jiān)控系統(tǒng)Zabbix3.2添加自動(dòng)發(fā)現(xiàn)磁盤IO并注冊(cè)監(jiān)控,需要的朋友參考下吧2018-01-01

