国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Linux】編寫第一個(gè)小程序:進(jìn)度條

這篇具有很好參考價(jià)值的文章主要介紹了【Linux】編寫第一個(gè)小程序:進(jìn)度條。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。


【Linux】編寫第一個(gè)小程序:進(jìn)度條,Linux,linux,c語言,小程序

1. 預(yù)備知識(shí)

1.1 簡單認(rèn)識(shí)幾個(gè)函數(shù)

1.1.1 sleep()

unsigned int sleep(unsigned seconds);
  • 作用:讓程序休眠指定秒數(shù),如:sleep(3); //讓程序休眠3秒
  • 與 Windows 上的 Sleep() 函數(shù)不同
  • 需要包含頭文件<unistd.h>

1.1.2 fflush()

int fflush(FILE* stream);
  • 作用:刷新緩沖區(qū)
  • 需要傳入一個(gè)流
  • 需要包含頭文件<stdio.h>

1.1.3 usleep()

int usleep(useconds_t usec);
  • 作用:讓程序休眠指定微秒,如:usleep(100000); //讓程序休眠100000微秒(0.1秒)
  • 1秒 = 1000000微秒
  • 需要包含頭文件<unistd.h>

1.1.4 memset()

void* memset(void* ptr, int value, size_t num);
  • 作用:將 ptr 指向的內(nèi)存塊的前 num 個(gè)字節(jié)設(shè)置為指定的 value 值
  • 返回設(shè)置后的 ptr
  • 需要包含頭文件<string.h>

1.2 緩沖區(qū)

直接上代碼觀察現(xiàn)象

#include <stdio.h>
#include <unistd.h>

int main()
{
    printf("you can see me       ");
    sleep(3);
    return 0;
}

執(zhí)行效果圖

【Linux】編寫第一個(gè)小程序:進(jìn)度條,Linux,linux,c語言,小程序

  • 首先要否定上面不切實(shí)際的想法,C語言是順序執(zhí)行的,所以 printf 函數(shù)一定先于 sleep 函數(shù)執(zhí)行。
  • 那為什么 3 秒后才打印到屏幕上呢?當(dāng)然是因?yàn)榫彌_區(qū)!
  • printf 函數(shù)跑完后,輸出的字符串是被保存到 C 對(duì) IO 函數(shù)提供的一個(gè)緩沖區(qū)里了,在程序退出的時(shí)候,緩沖區(qū)中的內(nèi)容才被刷新到屏幕上。
  • 我們需要使用上面講的 fflush 函數(shù)把緩沖區(qū)中的內(nèi)容提前強(qiáng)制刷新到屏幕上,使用方法:fflush(stdout);

1.3 回車與換行

首先我要拋出一個(gè)概念:回車和換行是不一樣的!

  • 回車( \r ):把光標(biāo)放到當(dāng)前行的開始。

【Linux】編寫第一個(gè)小程序:進(jìn)度條,Linux,linux,c語言,小程序

  • 換行( \n ):把光標(biāo)放到當(dāng)前位置的下一行。

【Linux】編寫第一個(gè)小程序:進(jìn)度條,Linux,linux,c語言,小程序

  • 所以理論上來講,‘\n’ 和 ‘\r’ 一起用才是我們理解中的”回車“,即:把光標(biāo)放到下一行最開始的位置。

2. 編寫入門版的進(jìn)度條

2.1 基本邏輯

  • 進(jìn)度 1% 打印 1 個(gè)字符,回車到開始的位置,刷新緩沖區(qū);
  • 進(jìn)度 2% 打印 2 個(gè)字符,回車到開始的位置,刷新緩沖區(qū);
  • 進(jìn)度 100% 打印 100 個(gè)字符,回車到開始的位置,刷新緩沖區(qū),程序終止。

【Linux】編寫第一個(gè)小程序:進(jìn)度條,Linux,linux,c語言,小程序

2.2 美化效果

  • 進(jìn)度條主體增加箭頭顯示
  • 顯示進(jìn)度百分比
  • 添加一個(gè)動(dòng)態(tài)的旋轉(zhuǎn)光標(biāo)

【Linux】編寫第一個(gè)小程序:進(jìn)度條,Linux,linux,c語言,小程序

2.3 代碼實(shí)現(xiàn)

// porcessbar.h

#pragma once

#include <stdio.h>

#define NUM 103
#define Body '='
#define Head '>'

// version 1
void process();
// processbar.c

#include "processbar.h"
#include <string.h>
#include <unistd.h>

const char* lable = "|/-\\";

// version 1
void process()
{
    char buffer[NUM];
    memset(buffer, '\0', sizeof(buffer));
    int cnt = 0;
    int n = strlen(lable);
    buffer[0] = Head;
    while (cnt <= 100)
    {
        printf("[%-100s][%3d%%][%c]\r", buffer, cnt, lable[cnt % n]);
        fflush(stdout);
        buffer[cnt++] = Body;
        if (cnt < 100)
        {
            buffer[cnt] = Head;
        }
        usleep(50000);
    }
    printf("\n");
}

2.4 執(zhí)行效果

【Linux】編寫第一個(gè)小程序:進(jìn)度條,Linux,linux,c語言,小程序

【Linux】編寫第一個(gè)小程序:進(jìn)度條,Linux,linux,c語言,小程序

【Linux】編寫第一個(gè)小程序:進(jìn)度條,Linux,linux,c語言,小程序

3. 編寫升級(jí)版的進(jìn)度條

  • 上面的進(jìn)度條算是一個(gè)進(jìn)度條嗎?我們的進(jìn)度條似乎在一個(gè)人玩單機(jī)呀,這樣的進(jìn)度條是沒有意義的。
  • 進(jìn)度條的進(jìn)度應(yīng)該是依賴于其他應(yīng)用的,比如下載。
  • 下面我們模擬一個(gè)下載環(huán)境,并修改進(jìn)度條,使進(jìn)度條可以根據(jù)下載的進(jìn)度,同步進(jìn)行顯示進(jìn)度的工作。

3.1 代碼實(shí)現(xiàn)

// processbar.h

#pragma once

#include <stdio.h>

#define NUM 103
#define Body '='
#define Head '>'

typedef void (*callback_t)(double);		// 函數(shù)指針類型

// version 2
void process_flush(double rate);
// processbar.c

#include "processbar.h"
#include <string.h>
#include <unistd.h>

const char* lable = "|/-\\";

// version 2: 進(jìn)度是多少,你進(jìn)度條能知道嗎?另外,什么進(jìn)度?依附于其他應(yīng)用的,比如下載
char buffer[NUM] = {0};
void process_flush(double rate)
{
    static int cnt = 0;
    int n = strlen(lable);
    if (rate <= 1.0)
    {
        buffer[0] = Head;
    }
    printf("[%-100s][%.1f%%][%c]\r", buffer, rate, lable[cnt % n]);
    fflush(stdout);

    buffer[(int)rate] = Body;
    if ((int)rate + 1 < 100)
    {
        buffer[(int)(rate + 1)] = Head;
    }
    if (rate >= 100.0)
    {
        printf("\n");
    }

    cnt++;
    cnt %= n;
}
// main.c

#include "processbar.h"
#include <time.h>
#include <stdlib.h>
#include <unistd.h>

// 模擬文件大小
#define FILESIZE (1024 * 1024 * 1024)

// 模擬一種場景,表示一種下載任務(wù)
void download(callback_t cb)    // 回調(diào)函數(shù)的形式
{
    srand(time(NULL) ^ 1023);   // 這樣寫只是為了讓隨機(jī)數(shù)更隨機(jī)
    int total = FILESIZE;
    while (total)
    {
        usleep(10000);  // 下載動(dòng)作
        int one = rand() % (1024 * 1024);  // 一次下載的大小
        total -= one;
        if (total < 0)
        {
            total = 0;
        }

        // 當(dāng)前的進(jìn)度是多少?
        int download = FILESIZE - total;
        double rate = (download * 1.0 / FILESIZE) * 100.0;
        cb(rate);
    }
}

int main()
{
    download(process_flush);
    return 0;
}

3.2 執(zhí)行效果

【Linux】編寫第一個(gè)小程序:進(jìn)度條,Linux,linux,c語言,小程序

【Linux】編寫第一個(gè)小程序:進(jìn)度條,Linux,linux,c語言,小程序

【Linux】編寫第一個(gè)小程序:進(jìn)度條,Linux,linux,c語言,小程序文章來源地址http://www.zghlxwxcb.cn/news/detail-787329.html


END

到了這里,關(guān)于【Linux】編寫第一個(gè)小程序:進(jìn)度條的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【Linux系統(tǒng)編程】Linux第一個(gè)小程序——進(jìn)度條

    【Linux系統(tǒng)編程】Linux第一個(gè)小程序——進(jìn)度條

    這篇文章我們一起來完成我們Linux中的第一個(gè)小程序——進(jìn)度條 在C語言中,字符可以分為可顯字符(printable characters)和控制字符(control characters)。 可顯字符是指可以在屏幕或打印輸出上顯示的字符,它們包括數(shù)字、字母、標(biāo)點(diǎn)符號(hào)、符號(hào)等。可顯字符可以直接被用戶看到

    2024年02月16日
    瀏覽(22)
  • 【Linux】-第一個(gè)小程序(進(jìn)度條)

    【Linux】-第一個(gè)小程序(進(jìn)度條)

    ??作者:小樹苗渴望變成參天大樹 ??作者宣言:認(rèn)真寫好每一篇博客 ??作者gitee:gitee ??作者專欄:C語言,數(shù)據(jù)結(jié)構(gòu)初階,Linux,C++ 動(dòng)態(tài)規(guī)劃算法 如 果 你 喜 歡 作 者 的 文 章 ,就 給 作 者 點(diǎn) 點(diǎn) 關(guān) 注 吧! 大家好久不見,已經(jīng)快一個(gè)月沒有更新Linux相關(guān)的知識(shí)了,希望大家

    2024年02月12日
    瀏覽(18)
  • Linux第一個(gè)小程序進(jìn)度條

    Linux第一個(gè)小程序進(jìn)度條

    ? 在寫進(jìn)度條程序之前我們需要介紹一下緩沖區(qū),緩沖區(qū)有兩種,輸入和輸出緩沖區(qū),這里主要介紹輸出緩沖區(qū)。在我們用C語言寫代碼時(shí),輸出一些信息,實(shí)際上是先輸出到輸出緩沖區(qū)里,然后才輸出到我們的顯示器上。 原因是: 如果輸出一個(gè)字符就打印到顯示器上,那么

    2024年02月05日
    瀏覽(19)
  • 【Linux】第一個(gè)小程序--進(jìn)度條

    【Linux】第一個(gè)小程序--進(jìn)度條

    這篇博客要綜合利用以前的知識(shí),來實(shí)現(xiàn)一個(gè)進(jìn)度條程序~ 目錄 換行回車 緩沖區(qū) 實(shí)現(xiàn)簡單的倒計(jì)時(shí) 實(shí)現(xiàn)進(jìn)度條 version1 version2 ? 在開始寫這個(gè)小程序之前,我們先學(xué)習(xí)一些預(yù)備知識(shí): ?在我們運(yùn)行這個(gè)程序時(shí),并沒有直接打印出“hello bit,hello world...”,而是當(dāng)程序運(yùn)行結(jié)束后

    2024年03月10日
    瀏覽(22)
  • linux第一個(gè)小程序 --- 進(jìn)度條【簡潔】

    linux第一個(gè)小程序 --- 進(jìn)度條【簡潔】

    結(jié)果:先輸入hello world然后休眠三秒后結(jié)束 當(dāng)去掉’\\\'n“ 后,結(jié)果就變成了先休眠三秒,然后打印hello world后結(jié)束。 該現(xiàn)象就證明了緩沖區(qū)的存在。 當(dāng)緩沖區(qū)中遇到’‘n’\\\'或者緩沖區(qū)被寫滿后才會(huì)被打印出來,在第二張圖片里面,沒有n,所以hello world先被寫入緩存區(qū),然后

    2024年01月20日
    瀏覽(18)
  • 【Linux】從0到1實(shí)現(xiàn)一個(gè)進(jìn)度條小程序

    【Linux】從0到1實(shí)現(xiàn)一個(gè)進(jìn)度條小程序

    個(gè)人主頁:??在肯德基吃麻辣燙 我的gitee:gitee倉庫 分享一句喜歡的話:熱烈的火焰,冰封在最沉默的火山深處 進(jìn)度條實(shí)現(xiàn): 本文講解如何從0到1實(shí)現(xiàn)一個(gè)進(jìn)度條小程序。 我們在寫作文的時(shí)候,寫到了一行的結(jié)尾,就得另起一行并到開頭繼續(xù)寫。 其中,這個(gè)另起一行的動(dòng)作

    2024年02月14日
    瀏覽(27)
  • 《Linux從練氣到飛升》No.07 Linux第一個(gè)小程序-進(jìn)度條的實(shí)現(xiàn)

    《Linux從練氣到飛升》No.07 Linux第一個(gè)小程序-進(jìn)度條的實(shí)現(xiàn)

    ??作者: 主頁 我的專欄 C語言從0到1 探秘C++ 數(shù)據(jù)結(jié)構(gòu)從0到1 探秘Linux 菜鳥刷題集 ??歡迎關(guān)注:??點(diǎn)贊??收藏??留言 ?? 碼字不易,你的??點(diǎn)贊??收藏??關(guān)注對(duì)我真的很重要,有問題可在評(píng)論區(qū)提出,感謝閱讀!??! 前面幾章我們講述了Linux指令、權(quán)限管理、編輯器

    2024年02月14日
    瀏覽(30)
  • 【Linux】:Linux項(xiàng)目自動(dòng)化構(gòu)建工具——make/Makefile || Linux第一個(gè)小程序——進(jìn)度條(簡單版本)

    【Linux】:Linux項(xiàng)目自動(dòng)化構(gòu)建工具——make/Makefile || Linux第一個(gè)小程序——進(jìn)度條(簡單版本)

    在本章開始給大家分享一個(gè)圖片 希望對(duì)你有幫助 在這里插入圖片描述 在開始本章之前 我們需要回顧一下上節(jié)課的函數(shù)的動(dòng)靜態(tài)庫的優(yōu)缺點(diǎn) 動(dòng)態(tài)庫的優(yōu)點(diǎn): 比較節(jié)省資源(這里說的資源不僅僅是磁盤資源 也包括網(wǎng)絡(luò)資源 內(nèi)存資源等等),不會(huì)出現(xiàn)太多的重復(fù)代碼 缺點(diǎn):對(duì)

    2024年02月05日
    瀏覽(39)
  • 【Linux】:使用git命令行 || 在github創(chuàng)建項(xiàng)目 || Linux第一個(gè)小程序——進(jìn)度條(進(jìn)階版本)

    【Linux】:使用git命令行 || 在github創(chuàng)建項(xiàng)目 || Linux第一個(gè)小程序——進(jìn)度條(進(jìn)階版本)

    在本章開始之前還是先給大家分享一張圖片 這是C++的筆試題 感興趣的同學(xué)可以去試一試 有難度的喲 也可以直接在??途W(wǎng)直接搜索這幾道題目哈 好了今天我們正式進(jìn)入我們的正題部分 安裝git 使用 Github 創(chuàng)建項(xiàng)目 注冊賬號(hào) 創(chuàng)建項(xiàng)目 ??1. 登陸成功后, 進(jìn)入個(gè)人主頁, 點(diǎn)擊左下

    2024年02月05日
    瀏覽(23)
  • shell 編寫一個(gè)帶有進(jìn)度條的程序安裝腳本

    shell 編寫一個(gè)帶有進(jìn)度條的程序安裝腳本

    使用 shell 寫一個(gè) 軟件安裝腳本,帶有進(jìn)度條 在這個(gè)示例中,使用 ANSI 轉(zhuǎn)義序列來實(shí)現(xiàn)覆蓋原來的打印信息,并保持進(jìn)度條在同一行顯示。通過使用 r 進(jìn)行回車,然后使用 \\033[K 清除當(dāng)前行的內(nèi)容,可以實(shí)現(xiàn)覆蓋效果。 在 print_progress 函數(shù)中,首先清除當(dāng)前行的內(nèi)容,然后構(gòu)

    2024年02月11日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包