1. 程式人生 > >Linux下實現進度條和彩色進度條

Linux下實現進度條和彩色進度條

一、普通進度條

#include <stdio.h>  
#include <unistd.h>  
  
int main()  
{  
    char buf[101] = {};  
    int i =0;  
    char *ptr = "|/-\\";  
    for(i = 0; i < 100 ; i++)  
    {  
        buf[i] = '#';  
        printf("[%-100s][%d%%][%c]\r", buf, i+1, ptr[i%4]);  
          
        fflush(stdout);  
        usleep(100000);  
    }  
    printf("\n");  
    return 0;  
}  

二、炫彩進度條

通過轉義序列設定終端顯示屬性時,可採用以下格式:

\033[Param{;Param;...}m            或         \e[Param{;Param;...}m  

其中,\033[或\e[為引導轉義序列,

                  Param為屬性項,{ }表示可選,多個選項間用分號間隔。

                   m表示設定屬性並結束轉義序列

常見的屬性項為(具體可根據:man console_codes命令查詢):

顯示序列:  
\033[0m           關閉轉義序列  
\033[1m           粗體或高亮  
\033[5m           閃爍  
前景顏色序列:  
\033[30m          黑  
\033[31m          紅  
\033[32m          綠  
\033[33m          黃  
\033[34m          藍  
\033[35m          洋紅  
\033[36m          青  
\033[37m          白  
背景顏色序列:  
與前景顏色對對應,前景色是30+,背景色是40+  

為實現不同顏色的替換,將這些顏色序列定義為巨集,所以,整體程式碼如下:

#include<stdio.h>  
#include<unistd.h>  
  
#define END "\033[0m"  
#define BLACK "\033[30m"  
#define RED "\033[31m"  
#define GREEN "\033[32m"  
#define YELLOW "\033[33m"  
#define BULE "\033[34m"  
#define PORPLE "\033[35m"  
#define DGREEN "\033[36m"  
#define WHITE "\033[37m"  
  
int main()  
{  
    char buf[102]="#";  
    int i=0;  
    char str[]="|/-\\";  
    int c = 0;  
    for(i=1;i<=100;i++)  
    {     
        buf[i]='#';  
        c = i%8;  
switch(c)  
        {  
            case 0:  
                printf(BLACK);  
                break;  
            case 1:  
                printf(RED);  
                break;  
            case 2:  
                printf(GREEN);  
                break;  
            case 3:  
                printf(YELLOW);  
                break;  
            case 4:   
                printf(BULE);  
                break;  
            case 5:  
                printf(PORPLE);  
                break;  
            case 6:  
                printf(DGREEN);  
                break;  
            case 7:  
                printf(WHITE);  
                break;  
        }  
        printf("[%-100s][%d%%][%c]\r",buf,i,str[i%4]);  
        printf(END);  
        fflush(stdout);  
        usleep(100000);  
    }  
    printf("\n");  
    return 0;  
}  

下面是Makefile:

processbar:processbar.o  
    gcc $^ -o [email protected]  
%o: %.c  
    gcc -c $^ -o [email protected]  
all=processbar.i\  
    processbar.s\  
    processbar.o\  
    processbar 
  
.PHONY: clean  
  
clean:  
    rm -f $(all)




相關推薦

Linux實現進度彩色進度

一、普通進度條 #include <stdio.h> #include <unistd.h> int main() { char buf[101] = {}; int i =0; char *

Linux實現epoll伺服器缺點總結

這篇文章我們來介紹一下epoll實現多使用者伺服器端 先列出epoll的API: epoll和poll,select有些不同,通過三個函式來進行實現的: 就是這張圖片裡面的三個函式 (1)epoll_create(size)介紹是: (2)ep

linux實現U盤sd卡的自動掛載

目的:使U盤和SD卡在Linux系統中進行插入和拔除時能自動掛載和解除安裝,不需要手動mount和umount。 步驟: 1、在/etc/init.d/rcS中加入以下語句 echo /sbin/mdev > /proc/sys/kernel/hotplug 2、在/

Linux實現彩色進度程式

程式碼: #include <stdio.h> #include <unistd.h> #include <string.h> int main() { int i = 0; char bar[101]; const char *la

Linux實現進度程式. 通過makefile進行編譯. 建議自主完成一個彩色進度.

Linux下用C語言完成一個彩色進度條 1.建一個Makefile檔案 2.vim Makefile test:test.c

Linux實現彩色進度

#include <stdio.h>

除了vim, 還有哪些常用的牛逼的編輯器。 自行查詢資料, 調研除了gcc, 還有哪些常用的牛逼的編譯器,為什麼除錯的時候需要編譯選項中新增 -g在Linux實現進度程式

除了vim, 還有哪些常用的牛逼的編輯器, 並能夠橫向對比編輯器之間的區別和優缺點。 首先先有一個概念IDE(整合開發環境),厲害的有vs等等。vim以及Emacs就向著這個方向發展。為了實現其強大功能。vim有了多模式編輯有(normal,insert,vis

除了vim, 還有哪些常用的牛逼的編輯器,除了gcc, 還有哪些常用的牛逼的編譯器,為什麼除錯的時候需要編譯選項中新增 -g,調研readelf命令,Linux實現進度程式.

除了vim, 還有哪些常用的牛逼的編輯器 Brackets Brackets也是一款為Linux開發者設計的開原始碼編輯器,使用Brackets寫程式碼,你不會被任何事情所打斷。比如在寫HTML程式碼時,即便你沒有儲存程式碼也可以及時預覽你的Web頁面效果。你也可以使用T

Linux實現簡易進度

本文將要概述 printf的緩衝區問題; \r和\n的區別; 如何實現一個簡易的進度條; 奇怪的現象 進度條是安裝和下載軟體中常見的部分,它可以表示軟體安裝或下載了多大,能給客戶一種直觀的感受,今天我們就來實現一個簡易的進度條,基本構思是這樣的,我們定

Linux C實現檔案拷貝可變色進度顯示

printf的格式化輸出中,可以設定前景色和背景色,因此進度條的顏色可以通過printf的格式化輸出來實現;此外,進度條的實現主要依靠"\r"和"fflush(stdout)“來支援。”\r" 用來回到行首而不換行,fflush(stdout)是重新整理螢幕輸出

CSS實現進度訂單進度

最近半個月為了期末考試,可要了學渣我半瓶血啊!今天本該好好複習的,可是狀態不好,就隨便找點樂子玩一玩,於是乎就想起之前面試時面試官給的一道題(見標題),那就弄點簡單的小玩意給自己洗洗腦咯。 簡單地效果圖如下: CSS實現進度條: html結構: <div id="progress"&

Linux實現客戶端兩連跳ping百度,修改dnsnmcil的用法

1.客戶端跳兩次路由器ping百度 rht vmctl reset 重置虛擬機器 真機和虛擬機器開啟火牆策略 用在配置網路單元學的修改兩機閘道器 設定server為雙網絡卡路由端接觸客戶端Desktop閘道器為1.1.1.100 路由器端設定GATEWAY為真機,記得syste

linux用互斥鎖條件變數來實現讀寫鎖

以下內容來源自UNP卷二的第八章 讀寫鎖的概念( the conception of read-write lock ) (1)只要沒有執行緒持有某個給定的讀寫鎖用於寫,那麼任意數目的執行緒可以持有該執行緒用於讀 (2)僅當沒有執行緒持有某個給定的讀寫鎖用於讀或用於寫,才能分配該

android自定義的弧形進度圓形進度-SemicircleProgress

SemicircleProgress 兩個自定義圓形和弧形進度條 第一個SemicircleProgress可以對中間和下面的字自定義 第二個CircularProgressar可

linuxraid學習心得raid0的實現

常見的硬碟:SATA一般pc機主流的硬碟。SCSI一般伺服器應用廣泛。IDE比較老,二者均可。 RAID 的意思是廉價磁碟冗餘陣。是一些列放在一起,成為一個邏輯卷的磁碟集合。 軟體RAID和硬體RAID 軟體RAID的效能低,使用主機資源,載入RAID軟體,從軟體RAID卷

linux 利用ls grep 正則表示式實現目錄檔案的分開顯示

要列出當前目錄下所有的檔名和目錄名直接使用ls命令即可。但如何只列出檔名而不列出目錄呢?查遍了ls 的幫助,也沒看到有這個現成的選項。幸好這個問題還是比較常見的,網上已經有了一些解答,但實驗之後,我發現看到的幾個連結給出的解決方法都是不完全正確的。具體如下。一、網上流傳的解

Linux實現視訊讀取(三)---Buffer的準備資料讀取

前面主要介紹的是:V4L2 的一些設定介面,如亮度,飽和度,曝光時間,幀數,增益,白平衡等。今天看看V4L2 得到資料的幾個關鍵ioctl,Buffer的申請和資料的抓取。 1. 初始化 Memory Mapping 或 User Pointer I/O. int ioct

linuxjdk的安裝配置

rac -s watermark img 使用 etc 文件拷貝 安裝 com 一、首先依據自己的系統位數在網上下載對應的jdk安裝包 下載地址例如以下:http://www.oracle.com/technetwork/java/javase/downloads/jd

奪命雷公狗---linux NO:27 linux的密碼管理用戶切換以及sudo的使用

意思 發現 which window 明顯 能開 操作 賬戶 修改 我們在windows下用戶名是可以設置空密碼登錄的,但是在linux 裏面必須要設置一個密碼才可以登錄,否則會失敗的。。。 在linux 下設置密碼可以使用 passwd 這個命令來進行設置。。。 但是

LinuxMySQL的備份恢復

mysql備份 再也不用擔心數據丟失了 MySQL備份的原因 1. 災難恢復 2. 審計 3. 測試1234512345mysql的備份類型 1. 根據服務器的在線狀態: 熱備:服務器處於運行狀態 冷備:服務器出去停止狀態 溫備:服務器處於半離線狀態,只能讀,但是不能