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

Linux小程序:倒計(jì)時(shí)和進(jìn)度條

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

Linux小程序

在Linux中我們實(shí)現(xiàn)兩個(gè)小程序來(lái)體會(huì)\r和\n的區(qū)別,以及緩沖區(qū)是什么?


前言

回車和換行的區(qū)別

對(duì)于 \r 和 \n 的理解:

  • \n 表示換行且回到下一行的最開始的位置
  • \r 表示的是回車,即將光標(biāo)回到當(dāng)前行最開始的位置

Linux小程序:倒計(jì)時(shí)和進(jìn)度條,Linux,linux,小程序,進(jìn)度條,倒計(jì)時(shí)

在C語(yǔ)言中,我們單單使用“\n”就可以實(shí)現(xiàn)換行回車,但是”\r“只能表示回車

//在定義中\(zhòng)n表示的是換行符號(hào),只是在語(yǔ)言實(shí)現(xiàn)中,包含了自動(dòng)回車這一功能,最后導(dǎo)致,\n為換行回車
#include<stdio.h>
void Func1()
{
    printf("hello world\n");
    printf("換行+回車\n");  //hello world
	return;				//換行+回車
}
void Func2()
{
    printf("123456\r");
    printf("654\n");  //測(cè)試結(jié)果為654456
    return;
}
int main()
{
    printf("測(cè)試換行\(zhòng)n");
    Func1();
    printf("測(cè)試回車\n");
    Func2();
    return 0;
}

緩沖區(qū)

Linux緩沖區(qū)是指在內(nèi)存中開辟的一塊區(qū)域,用于存儲(chǔ)輸入輸出數(shù)據(jù)的臨時(shí)存儲(chǔ)區(qū)域。當(dāng)應(yīng)用程序向文件或設(shè)備進(jìn)行讀寫操作時(shí),數(shù)據(jù)會(huì)先被存儲(chǔ)到緩沖區(qū)中,然后再由緩沖區(qū)將數(shù)據(jù)寫入磁盤或設(shè)備中。緩沖區(qū)的作用是提高數(shù)據(jù)讀寫的效率,減少磁盤或設(shè)備的訪問次數(shù),從而提高系統(tǒng)的性能。在Linux系統(tǒng)中,緩沖區(qū)的大小可以通過修改內(nèi)核參數(shù)來(lái)進(jìn)行調(diào)整。

我們來(lái)看看緩沖區(qū)的體現(xiàn)

Linux小程序:倒計(jì)時(shí)和進(jìn)度條,Linux,linux,小程序,進(jìn)度條,倒計(jì)時(shí)

認(rèn)識(shí)fflush函數(shù)

fflush(stdin)是清空輸入緩存的函數(shù),在輸入字符之前調(diào)用它可以清除之前未讀取的字符。

fflush(stdout)是刷新輸出緩沖區(qū)的函數(shù),它可以強(qiáng)制將緩沖區(qū)中的輸出立即發(fā)送到輸出設(shè)備(通常是顯示器)。它對(duì)應(yīng)的頭文件是<stdio.h>

#include<stdio.h>
#include<unistd.h>   //sleep的頭文件
int main()
{
    printf("hello world!")
    fflush(stdout); //刷新緩沖區(qū)
    sleep(2);
    return 0;
}

總結(jié)

  1. \n 自帶刷新緩沖區(qū)的功能
  2. fflush(stdout)可以強(qiáng)制刷新輸出緩沖區(qū)的函數(shù)

小程序的實(shí)現(xiàn)

我們學(xué)習(xí)了上文中的換行和回車,以及緩沖區(qū)的概念,以此嘗試在Linux中嘗試做兩個(gè)小程序,倒計(jì)時(shí)和進(jìn)度條程序的實(shí)現(xiàn)。

倒計(jì)時(shí)程序

結(jié)合換行和回車,以及緩沖區(qū)的概念,我們可以實(shí)現(xiàn)倒計(jì)時(shí)

# include<stdio.h>
# include<unistd.h>
void Fun1(int n)
{
    //實(shí)現(xiàn)倒計(jì)時(shí)的函數(shù)
    int i=n; 
    for(; i >= 0 ; i-- )
    {
        printf("%-5d\r",i);
        fflush(stdout);
        sleep(1);  
    }   
}
int main()
{
    //實(shí)現(xiàn)倒計(jì)時(shí),我們測(cè)試過緩沖區(qū)和換行回車
    //倒計(jì)時(shí)的實(shí)現(xiàn)應(yīng)該是使用 \r 回車符號(hào),不斷變更數(shù)值
    int n=0;
    printf("請(qǐng)輸入N的數(shù)值:");
    scanf("%d",&n);// 實(shí)現(xiàn)任意倒計(jì)時(shí)
    //實(shí)現(xiàn)函數(shù)主體
    Fun1(n);
    return 0;
}

進(jìn)度條程序

進(jìn)度條是指通過展示下載的過程(進(jìn)度)以及百分比還有加載光標(biāo),來(lái)模擬進(jìn)度條。

Progressbar.h

進(jìn)度條頭文件,我們?cè)诶锩媛暶骱瘮?shù),宏定義變量,導(dǎo)入頭文件。

//下面是Progressbar.h文件內(nèi)容
# pragma once  
#include<stdio.h>
#include<unistd.h>
//進(jìn)度條的頭文件,進(jìn)行設(shè)置宏定義

#define Num 102
#define Top 100

#define Body '='
#define Right '>'

//聲明函數(shù)
extern void progressbar(int speed);//實(shí)現(xiàn)
extern void initbar();  //初始化

Progressbar.c

//實(shí)現(xiàn)進(jìn)度條程序的主要文件
#include<stdio.h>
#include "ProgressBar.h"
#include<string.h>
#include<unistd.h>
//方案二:
const char* lable="\\|/-";
char bar[Num];

#define GREEN "\033[0;32;32m"  //這是改變打印的顏色語(yǔ)句
#define NONE "\033[m"
void progressbar(int rate)  //rate表示的是當(dāng)前的進(jìn)下載進(jìn)度 0-100區(qū)間的范圍
{
    //rate 表示的是當(dāng)前下載進(jìn)度
    if(rate<0||rate>100 ) return ;
    int len=strlen(lable);

    printf(GREEN"[%-100s]"NONE"[%d%%][%c]\r",bar,rate,lable[rate%len]);

    fflush(stdout);  //使用fflush強(qiáng)制刷新輸出緩沖區(qū)
    bar[rate++]=Body;
    if(rate<100) bar[rate]=Right;   //只要沒有超過100 就加上Right

}

void initbar()
{
    memset(bar,'\0',sizeof(bar));
}

//下面是第一種方法,直接調(diào)用progressbar(加載速度) 傳參為speed 即文件下載速度
//方案一:
//void progressbar(int speed)
//{
//    //實(shí)現(xiàn)進(jìn)度條代碼
//    char bar[Num];
//    //初始化bar
//    memset(bar, '\0', sizeof(bar));
//
//    //使用while循環(huán)實(shí)現(xiàn)
//    int len = strlen(lable);
//    int count = 0;
//    while (count <= 100)
//    {
//        //進(jìn)行打印
//        printf("[%-100s][%d%%][%c]\r", bar, count, lable[count % len]);
//        fflush(stdout);      //沒有\(zhòng)n,就無(wú)法刷新,只能手動(dòng)刷新,使用fflush,顯示器默認(rèn)的是行刷新
//        bar[count++] = Body;
//        if (count < 100) bar[count] = Right;
//        usleep(speed);
//    }
//    printf("\n");
//}

test.c

這是主要文件,從該文件傳參實(shí)現(xiàn)文件的運(yùn)行

#include<stdio.h>
#include"ProgressBar.h"

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

void downLoad(callback_t cb)   //使用函數(shù)指針來(lái)調(diào)用
{
    //callbak_t 實(shí)際上就是表示一個(gè)參數(shù)為int的函數(shù)指針,那么cb表示這個(gè)函數(shù)名
    int total =1000;  //下載的總?cè)萘?/span>
    int curr=0;       //當(dāng)前下載的容量

    while(curr<=total)
    {
        usleep(50000);  //表示模擬下載花費(fèi)的時(shí)間
        int rate=curr*100/total; //更新進(jìn)度

        cb(rate);//將rate參數(shù)傳遞給cb函數(shù)(形參)
        curr+=10;//表示一次循環(huán)下載了一部分
    }
    printf("\n");
}

int main()
{

    printf("下載1:\n");
    downLoad(progressbar);
    initbar();  //進(jìn)行對(duì)于bar初始化
    
    printf("下載2:\n");
    downLoad(progressbar);
    initbar();  //下載一次就要進(jìn)行初始化
    
    printf("下載3:\n");
    downLoad(progressbar);
    initbar();  

    printf("下載4:\n");
    downLoad(progressbar);
    initbar();
    return 0;
}

//方案一: 手動(dòng)控制每一次加載usleep的時(shí)間
//int main()
//{
//    //實(shí)現(xiàn)進(jìn)度條的主程序
//    printf("第一次加載:\n");
//    
//    progressbar(100000);
//    
//    return 0;    
//}

Linux小程序:倒計(jì)時(shí)和進(jìn)度條,Linux,linux,小程序,進(jìn)度條,倒計(jì)時(shí)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-580696.html

總結(jié)

  1. \n和\r我們都進(jìn)行了解釋和演示,對(duì)于緩沖區(qū)的概念圖文解釋,認(rèn)識(shí)到了兩種方式來(lái)強(qiáng)制刷新緩沖區(qū)。
  2. 標(biāo)準(zhǔn)輸入(stdin)標(biāo)準(zhǔn)輸出(stdout)標(biāo)準(zhǔn)錯(cuò)誤 ,我們認(rèn)識(shí)到了fflush函數(shù)來(lái)強(qiáng)制刷新
  3. \n 實(shí)際上是執(zhí)行換行+回車操作的,也有刷新緩沖區(qū)的作業(yè)
  4. 我們實(shí)現(xiàn)了兩個(gè)Linux上的小程序,倒計(jì)時(shí)以及進(jìn)度條。

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

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(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)文章

  • 微信小程序展示倒計(jì)時(shí)

    微信小程序展示倒計(jì)時(shí)

    html ? ts ?

    2024年04月25日
    瀏覽(27)
  • 微信小程序?qū)崿F(xiàn)倒計(jì)時(shí)功能(超簡(jiǎn)單)

    ?聲明倒計(jì)時(shí)長(zhǎng)和當(dāng)前剩余時(shí)長(zhǎng)(字符串形式),我這里是30分鐘(單位為秒) ?定義倒計(jì)時(shí)函數(shù),把倒計(jì)時(shí)長(zhǎng)除以60的整數(shù)部分作為分,把倒計(jì)時(shí)長(zhǎng)除以60的余數(shù)作為秒; 執(zhí)行完后減一秒,用定時(shí)器每隔一秒執(zhí)行一次。 ?如果秒數(shù)不夠兩位,則在秒前加上字符串\\\'0\\\'。如:20:

    2024年02月11日
    瀏覽(112)
  • python實(shí)現(xiàn)一個(gè)簡(jiǎn)單的桌面倒計(jì)時(shí)小程序

    python實(shí)現(xiàn)一個(gè)簡(jiǎn)單的桌面倒計(jì)時(shí)小程序

    本章內(nèi)容主要是利用python制作一個(gè)簡(jiǎn)單的桌面倒計(jì)時(shí)程序,包含開始、重置?、設(shè)置功能。 目錄 一、效果演示 二、程序代碼

    2024年02月04日
    瀏覽(31)
  • 微信小程序-全局倒計(jì)時(shí)+全局彈窗提示

    微信小程序-全局倒計(jì)時(shí)+全局彈窗提示

    1、在計(jì)時(shí)頁(yè)面中點(diǎn)擊【開始】按鈕開始倒計(jì)時(shí),當(dāng)退出該頁(yè)面時(shí)計(jì)時(shí)仍然繼續(xù) 2、計(jì)時(shí)結(jié)束后,彈出提示(無(wú)論當(dāng)前處于哪個(gè)頁(yè)面) 一、全局定義 1、app.json:加上下面這個(gè) 2、app.wxss:需要導(dǎo)入dialog.wxss,否則自定義的彈窗樣式失效 3、app.js:實(shí)現(xiàn)倒計(jì)時(shí)+設(shè)置變量監(jiān)聽器 二、

    2024年02月10日
    瀏覽(24)
  • 微信小程序?qū)崿F(xiàn)給一個(gè)時(shí)間去設(shè)置倒計(jì)時(shí)

    設(shè)置倒計(jì)時(shí) 此方法僅限不超過一個(gè)月的倒計(jì)時(shí)

    2024年02月11日
    瀏覽(32)
  • 實(shí)現(xiàn)微信小程序預(yù)覽文件,預(yù)覽頁(yè)面添加倒計(jì)時(shí)

    提示:1、實(shí)現(xiàn)小程序預(yù)覽 doc、docx、xls、xlsx、ppt、pptx、pdf類型文件 ?????????? 2、進(jìn)入頁(yè)面展示文件內(nèi)容、開始按鈕,點(diǎn)擊,按鈕變?yōu)椤荆?*s)】倒計(jì)時(shí) ?????????? 3、倒計(jì)時(shí)結(jié)束后,此按鈕消失,彈出顯示【完成】,彈框保留2s后小時(shí),用戶繼續(xù)閱讀 例如:項(xiàng)目場(chǎng)景

    2024年02月13日
    瀏覽(34)
  • 微信小程序?qū)崿F(xiàn)倒計(jì)時(shí)功能,一看就懂,直接用

    結(jié)構(gòu)完整,直接用就可以

    2024年02月01日
    瀏覽(32)
  • uni-app小程序中實(shí)現(xiàn)倒計(jì)時(shí)功能

    在uni-app小程序中實(shí)現(xiàn)倒計(jì)時(shí)功能,可以按照以下步驟進(jìn)行: 在data中設(shè)置一個(gè)變量用于存儲(chǔ)倒計(jì)時(shí)的剩余時(shí)間: 在methods中創(chuàng)建一個(gè)函數(shù),用于控制倒計(jì)時(shí)的邏輯: 可以在點(diǎn)擊按鈕或其他事件觸發(fā)時(shí)調(diào)用startCountdown方法來(lái)開始倒計(jì)時(shí): 在頁(yè)面中顯示倒計(jì)時(shí)時(shí)間: 可以在頁(yè)面中

    2024年02月07日
    瀏覽(29)
  • 藍(lán)橋杯倒計(jì)時(shí) | 倒計(jì)時(shí)4天

    藍(lán)橋杯倒計(jì)時(shí) | 倒計(jì)時(shí)4天

    作者????♂?:讓機(jī)器理解語(yǔ)言か 專欄??:藍(lán)橋杯倒計(jì)時(shí)沖刺 描述??:藍(lán)橋杯沖刺階段,一定要沉住氣,一步一個(gè)腳印,勝利就在前方! 寄語(yǔ)??:??沒有白走的路,每一步都算數(shù)!?? 題目描述 我們要求找出具有下列性質(zhì)數(shù)的個(gè)數(shù)(包含輸入的自然數(shù) n): 先輸入一個(gè)自

    2023年04月09日
    瀏覽(55)
  • 51單片機(jī)實(shí)現(xiàn)倒計(jì)時(shí),按鍵控制倒計(jì)時(shí)

    51單片機(jī)實(shí)現(xiàn)倒計(jì)時(shí),按鍵控制倒計(jì)時(shí)

    基于AT89C52的答辯倒計(jì)時(shí)。四個(gè)按鍵分別控制倒計(jì)時(shí)開始,暫停,時(shí)間加和減。剩下30S時(shí)蜂鳴器響,倒計(jì)時(shí)結(jié)束蜂鳴器響。 ?

    2024年02月07日
    瀏覽(33)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包