Linux实现进度条小程序——缓冲区

news2024/11/16 15:40:16

📝Linux实现进度条小程序

  • 📝 行缓冲区
  • 📝 fflush函数
  • 📝 示例
  • 📝 进度条
    • 如何编译运行
    • proc.h
    • proc.c
    • main.c


好雨知时节
当春乃发生
随风潜入夜
润物细无声

回车换行其实是两个概念,一是回车,一是换行,换行是光标换到下一行,并不会到文本的开头,回车使光标回到当前行的开始,那在我们语言的层面是怎么做到对文本进行换行和回车的,我们平时说到 \n其实就是换行的意思的,但是语言的本身把他解释成回车换行,\r是回车的意思的,回车换行其实就是先换行再进行回车。

📝 行缓冲区

在C语言中行缓冲区,再我们运行程序的时候,我们会在屏幕上看到显示的内容,这些都是由字符组成的,那我们的C语言不是一个字符一个字符的显示再屏幕上,这样觉得消耗太大了,所以我们有了行缓冲区的概念,就是程序运行时的一块内存,把数据先放到这个内存里面,等到这个小内存满了,就直接一起全部给刷新出来,为什么又叫行缓冲区,就是当一行满了,就一起刷新出来,只有遇到\n或者scanf或者fflush这样的函数就会提前进行刷新,程序结束后,最终也会将数据进行刷新出来。

如下代码,这里sleep()睡眠函数,使用它需要包含头文件#include<unistd.h>,它的作用是能够让程序在某个位置停留一定时间后再继续运行。
在这里插入图片描述

make
./myfile

执行生成的可执行文件后,打印到屏幕上
在程序文件的加载过程中,并不是一路顺风的,经常会出现卡顿和进度突然变快和变慢的情况,这就要关系到缓冲区的概念了。

#include <stdio.h>
#include <unistd.h>
int main()
{
 printf("hello world");
 sleep(3);
 return 0;
}

若不带\n,则打印的数据再缓冲区里面,然后开始执行了sleep代码,最后程序结束了,就会一起刷新出来,最后从显示出来。

📝 fflush函数

我们想必须提前刷新出来,还有一种方法就是使用fflush函数。C语言会默认打开三个流,,一个是输入流stdin,一个是输出流stdout,一个是错误流stderr,而fflush的参数就是传流进出,这里是将数据输出,所以使用输出流。

#include <stdio.h>
#include<unistd.h>
int main()
{
 printf("hello Makefile!");
 fflush(stdout);
 sleep(3);
 return 0;
}

这样就可以达到先打印的效果。

📝 示例

#include <stdio.h>
#include<unistd.h>
int main(){
        //printf("hello owrld!\n");
        //sleep(3);
        //printf("hello world!\r");
        int i = 20;
        for(;i>=0;i--){
                printf("%2d\r",i);
                fflush(stdout);
                sleep(1);
        }
        return 0;
}

📝 进度条

样式我们希望是这样的:

[################           ][xx%][\]

分文件编写
在这里插入图片描述

如何编译运行

这里三个分文件如何在Linux下编译运行,创建一个Makefile

make
./myprocess

proc.h

#pragma once


#include <stdio.h>

extern void process();

proc.c

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



#define SIZE 101
#define STYLE '='
#define ARR '>'

void process(){
  char bar[SIZE];
  memset(bar,'\0',sizeof(bar));
  int i =0;
  const char* label = "|/-\\";
  while(i<=100){
    printf("[\033[43;32;31m%-100s\033[0m][%d%%][%c]\r",bar,i,label[i%4]);
    fflush(stdout);
    bar[i++] = STYLE;
    if(i != 100) bar[i] = ARR;
    usleep(100000);
  }
  printf("\n");
  //printf("this demo process\n");
}

main.c

#include "proc.h"

int main(){
  process();
  return 0;
}


在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2088423.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JAVA毕业设计167—基于Java+Springboot+vue3+小程序的物业管理系统小程序(源代码+数据库+万字论文+文献综述)

毕设所有选题&#xff1a; https://blog.csdn.net/2303_76227485/article/details/131104075 基于JavaSpringbootvue3小程序的物业管理系统小程序(源代码数据库万字论文文献综述)167 一、系统介绍 本项目前后端分离带小程序(可以改为ssm版本)&#xff0c;分为用户、管理员两…

微服务--认识微服务

微服务架构的演变 1. 单体架构&#xff08;Monolithic&#xff09; 阶段描述&#xff1a;在单体应用时代&#xff0c;整个应用程序被设计为一个项目&#xff0c;并在一个进程内运行。这种架构方式开发简单&#xff0c;便于集中管理&#xff0c;但随着应用的复杂化&#xff0c…

[000-01-008].第01节:Nacos开发应用

我的后端学习大纲 SpringCloud学习大纲 2.Nacos功能&#xff1a; Nacos可以作为服务的注册中心&#xff0c;也可以作为服务配置中心&#xff1a; 服务发现与服务健康检查:Nacos使服务更容易注册,并通过DNS或HTTP接口发现其他服务&#xff0c;Nacos还提供服务的实时健康检查&…

无人机遥控器工作原理!!!

一、基本组成 无人机遥控器通常由发射端&#xff08;遥控器本体&#xff09;和接收端&#xff08;安装在无人机上的接收模块&#xff09;两部分组成。发射端包含控制杆、按钮、显示屏等物理控件&#xff0c;用于输入控制指令&#xff1b;接收端则负责接收来自发射端的无线电信…

机器人外呼的具体操作步骤是怎样的?

今天小编给大家整理一下几点关于使用AI机器人拨打电销电话的具体步骤可以归纳为以下几个关键环节&#xff1a; ​ ### 一、选择合适的AI机器人服务 1. **平台选择**&#xff1a; - 选择一个提供AI机器人拨打电话服务的平台&#xff0c;这可以是云端的AI电话机器人服务&#…

关于docker-maven-plugin在arm架构的机器上制作镜像报错

背景 客户环境提供的容器集群全是arm架构&#xff0c;因此打包时要在arm架构的电脑上来制作镜像&#xff0c;本人使用mac m3芯片macbook&#xff0c;但是执行mvn clean package -D maven.test.skiptrue docker:build 命令时报错&#xff0c;报错信息如下&#xff1a; Caused …

数据分析及应用:如何分析基于绝对中位差的异常值检测问题?

目录 0 场景描述 1 数据准备 2 问题分析 abs(rn - (cnt+1)/2) < 1 3 小结 0 场景描述 数据集中可能存在异常的值。值存在异常有多种原因: (1)可能是数据收集方式有问题,比如记录值的仪表存在误差;(2)可能是数据输入错误导致的;(3)还可能是因为数据生成时环境…

基于web 在线影院系统网站设计与实现

3.1 系统基本情况描述 在线影院系统需要实现的功能包括用户的管理&#xff0c;以及视频信息的管理和使用等。具体来讲&#xff0c;它包含用户管理中常见的注册、登录操作&#xff0c;视频信息的显示、播放、搜索操作&#xff0c;视频管理中的添加、删除、修改等。同时为了方便…

【VScode环境配置】在VScode中配置php环境(wamp版)

1.前置准备 1.wamp&#xff08;集成环境&#xff09; 2.Visual Studio Code 2.系统变量配置 1.打开php所在路径&#xff1a; 一般在你所安装的wamp的bin目录文件夹下。wamp可以自定义安装路径&#xff0c;每个人的位置不一样&#xff0c;这里是拿作者的路径作为演示。 C:…

Golang | Leetcode Golang题解之第382题链表随机节点

题目&#xff1a; 题解&#xff1a; type Solution struct {head *ListNode }func Constructor(head *ListNode) Solution {return Solution{head} }func (s *Solution) GetRandom() (ans int) {for node, i : s.head, 1; node ! nil; node node.Next {if rand.Intn(i) 0 { …

mysql与es数据同步

同步方案 1. 同步双写 同步双写是一种数据同步策略&#xff0c;它指的是在主数据库&#xff08;如MySQL&#xff09;上进行数据修改操作时&#xff0c;同时将这些修改同步写入到ES中。这种策略旨在确保两个数据库之间的数据一致性&#xff0c;并优化系统的读写性能。 目标 …

es映射配置(_mapping)

文章目录 1、创建映射字段2、查看映射关系 1、创建映射字段 PUT /索引库名/_mapping {"properties": {"字段名": {"type": "类型","index": true&#xff0c;"store": true&#xff0c;"analyzer": &q…

python-矩阵交换行

[题目描述] 给定一个 55 的矩阵(数学上&#xff0c;一个 rc 的矩阵是一个由 r 行 c 列元素排列成的矩形阵列)&#xff0c;将第 n 行和第 m 行交换&#xff0c;输出交换后的结果。输入&#xff1a; 输入共 6 行&#xff0c;前 5 行为矩阵的每一行元素&#xff0c;元素与元素之间…

行业Know How在AI提示词中的重要性

现在AI这玩意儿可是火得不得了,ChatGPT、Claude这些大语言模型简直是让人眼花缭乱。可是呢,你要是不会用,那就跟给猴子一部iPhone有啥区别? 咱得明白,这AI不是神仙,它也是需要"调教"的。 你给它的提示词就像是给小孩子布置作业,说得不清不楚,它可能就给你整出些稀奇…

NPC框架

NPC框架在不同领域可能有不同的含义和应用。在软件开发和游戏设计领域,NPC(Non-Player Character,非玩家角色)框架通常与角色控制、行为模拟和交互逻辑等方面相关。以下是对NPC框架的一种概括性解释: NPC框架概述 定义: NPC框架是指在软件开发或游戏设计中,用于创建、…

深入探索.NET Flyleaf的高级特性与最佳实践

文章目录 前言一、高级特性1.强大的扩展性2.高性能3.易开发4.广泛兼容性5.自定义性强6.多语言支持 二、最佳实践1.定制化界面开发2.性能优化3.插件集成4.跨平台部署5.安全性考虑 三、应用案例1.案例一&#xff1a;个人媒体中心2.案例二&#xff1a;教育平台3.案例三&#xff1a…

国内首批!文心快码获中国信通院评测AI智能编码工具4+级

&#x1f381;&#x1f449;点击进入文心快码 Baidu Comate 官网&#xff0c;体验智能编码之旅&#xff0c;还有超多福利&#xff01;&#x1f381; 国内首批&#xff01;文心快码获中国信通院评测AI智能编码工具4级 在当下这个快节奏的开发时代&#xff0c;每一个程序员都在追…

爆肝熬夜整理出来的百道Python基础必刷题!(附加源码和答案)

一、前言 一个python入门初学者如何学代码,读代码和写代码&#xff0c;我想学代码不知道方向谁能给我指明一个方向?对于c语言来说&#xff0c;要记得东西其实不多&#xff0c;基本就是几个常用语句加一些关键字而已。你所看到的那些几千甚至上万行的代码&#xff0c;都是用这…

零基础学习Redis(9) -- set类型命令使用

set&#xff0c;即集合和list类似&#xff0c;集合中的每个元素都是string类型&#xff0c;但是集合中的元素是无序且不能重复的 1. 增删查操作 1.1 增加元素 sadd key member1 menber2 ... 在key中添加一个或多个menber1 &#xff0c;返回添加成功的数量&#xff0c;添加每…

ZW3D二次开发_UI_ZsCc::OptionRadios控件回调

1.ZW3D中的OptionRadios控件如何实现点击触发回调并且获取点击后的值&#xff1f;如下图 2.教程如下&#xff1a; 1&#xff09;添加OptionRadios控件到表单中 2&#xff09;增加radio按钮 3&#xff09;添加回调 4&#xff09;编写回调函数 int radioCallbackDemo(char* for…