linux—進度條彩色版簡單實現
阿新 • • 發佈:2018-12-11
一、緩衝區理解: 1.無緩衝:將所得到的資訊馬上顯示出來。 2.行緩衝:輸入輸出遇到換行才執行的I/O操作,比如鍵盤操作。 3.全緩衝:輸入輸出寫滿緩衝區蔡執行I/O操作。比如磁碟讀寫。 當我們在實現的時候需要使用fflush(stdout)來重新整理緩衝區,以便下一次的輸出。 二、fflush的理解: 1.對於輸出流,fflush()強制寫入給定輸出或更新的所有使用者空間緩衝資料。 2.對於輸入流,fflush()丟棄任何緩衝資料。 這是從底層檔案中獲取的,但還沒有被應用程式消耗掉。流的開放狀態不受影響。 三、’\r’和’\n’的區別: 回車用’\r’表示,表示是回到改行的初始位置,換行用’\n’表示,表示直接換到下一行,所以我們需要用’\r’,以此達到進度條的效果。 四、顏色設定及擴充套件: 1.顏色設定:
#define NONE "\e[0m" #define RED "\e[0;31m" #define BLUE "\e[0;34m" #define GREEN "\e[0;32m"
2.擴充套件:
編號 | 含義 |
---|---|
40 | 黑色 |
41 | 深紅色 |
42 | 綠色 |
43 | 黃色 |
44 | 藍色 |
45 | 紫色 |
46 | 深綠色 |
47 | 白色 |
控制碼 | 作用 |
---|---|
\033[0m | 關閉所有屬性 |
\033[1m | 設定高亮度 |
\033[4m | 下劃線 |
\033[5m | 閃爍 |
\033[7m | 反顯 |
\033[8m | 消隱 |
\033[30m– \033[37m | 設定前景色 |
\033[40m– \033[47m | 設定背景色 |
\033[nA | 游標上移n行 |
\033[nB | 游標下移n行 |
\033[nC | 游標右移n行 |
\033[nD | 游標左移n行 |
\033[y;H | 設定游標位置 |
\033[2J | 清屏 |
\033[K | 清除從游標到行尾的內容 |
\033[s | 儲存游標位置 |
\033[u | 恢復游標位置 |
五、sleep和usleep簡單介紹: 1,sleep:以秒為單位暫停讀秒; 2.usleep:以毫秒為單位暫停讀秒; 六、程式碼實現:
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#define NONE "\e[0m"
#define RED "\e[0;31m"
#define GREEN "\e[0;32m"
#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 <=14)
printf(RED"%s[%d%%%c]\r"NONE,str,index*5,tmp[index%4]);
elseif(index<=14)
printf(BLUE"%s[%d%%%c]\r"NONE,str,index*5,tmp[index%4]);
else
printf(GREEN"%s[%d%%%c]\r"NONE,str,index*5,tmp[index%4]);
fflush(stdout);
index++;
usleep(100000);
}
printf("\n");
return 0;
}