欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Linux簡易彩色進(jìn)度條的實例代碼

 更新時間:2017年11月23日 08:45:13   作者:Suhw  
#進(jìn)度條:顧名思義就是看計算機(jī)處理任務(wù)時的速度,完成度。下面通過本文給大家分享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)文章

最新評論