Linux小程序——进度条

简介: 一个linux的小程序

@TOC


1. ProcBar.h

主要记录了函数的定义

#ifndef TEST_H_
#define TEST_H_
#include<stdio.h>
#include<string.h>
#include<unistd.h>
#define M 101
#endif

使用#ifndef TEST_H_ #define TEST_H_ #endif, 是防止头文件被重复多次包含

2. makefile

使用 vim makefile,进入vim编辑器

ProcBar: ProcBar.c Main.c
    gcc $^ -o $@
.PHONY:clean
clean:
    rm -f ProcBar

使用makefile,使其可借助make 生成可执行程序,以及使用make clean

删除可执行程序

3. Main.c

主要是函数的调用

#include"ProcBar.h"
int main()
{
 show();
 return 0;
 }

4. ProcBar.c

主要是函数的实现

1.缓冲区问题

#include"ProcBar.h"
 void show()
 {
  printf("hello world!\n");
  sleep(3);//睡眠3秒
 }

发现当在有\n的情况下,先输出hello world!,然后程序在3秒后结束

#include"ProcBar.h"
 void show()
 {
  printf("hello world!");//1
  sleep(3);//睡眠3秒     //2
 }

而在没有\n的情况下,却是先睡眠3秒,这就很不正常

由于是自上而下执行的,所以肯定是要先执行printf内容的,再进行休眠

但为什么得到的结果不一样呢?

是因为行缓冲的刷新策略是遇见\n后才刷新,

第二次没有\n的情况,printf的内容在缓冲区中。

2. 解决方法

使用c语言库中的函数 fflush

  在这里插入图片描述通过查询c官网知道,该函数内部是一个流的存在。我们想要将缓冲区的内容显示到屏幕上,就需要使用 标准输出流stdout
#include"ProcBar.h"
 void show()
 {
  printf("hello world!");//1
  fflush(stdout);
  sleep(3);//睡眠3秒     //2
 }

这样就会跟第一次有\n的一样正常刷新,

即先出现hello world! ,再睡眠2秒结束程序

3. \n与\r的区别

\n代表的是换行

\r代表的是回车

在这里插入图片描述

当光标所处为红圆圈的位置时,使用\n,发现只会到下一行相同的位置

在这里插入图片描述

当光标所处为红圆圈的位置时,使用\r后,回到该行的行首

4.整体代码的实现

#incldue"ProcBar.h"
void show()
{
 int i=0;
  char Bar[M];
  memset(Bar,'\0',sizeof(Bar));//初始化为'\0'
  char *grade="|/-\\";//使用\\ ,否则会识别错误
  while(i<=100)
  {
   printf("[%-100s] [$d%] [%c] \r",Bar,i,grade[i%4]);
   fflush(stdout);
   usleep(10000);
   Bar[i++]='#';
   }
 }

usleep也是c语言的函数,代表以微秒计时

目录
相关文章
|
缓存 小程序 Linux
【Linux】Linux第一个小程序-进度条
【Linux】Linux第一个小程序-进度条
165 0
|
小程序 Linux 开发工具
【Linux】Linux 开发工具(vim、gcc/g++、make/Makefile)+【小程序:进度条】-- 详解
【Linux】Linux 开发工具(vim、gcc/g++、make/Makefile)+【小程序:进度条】-- 详解
|
Linux 开发工具
linux下使用gcp拷贝数据的时候显示进度条
linux下使用gcp拷贝数据的时候显示进度条
128 2
|
小程序
【亲测有效】支持横竖屏 微信小程序video禁止进度条拖动,微信小程序遮罩进度条,
【亲测有效】支持横竖屏 微信小程序video禁止进度条拖动,微信小程序遮罩进度条,
426 1
【亲测有效】支持横竖屏 微信小程序video禁止进度条拖动,微信小程序遮罩进度条,
|
小程序 Linux C语言
Linux小程序 —— 进度条
Linux小程序 —— 进度条
177 6
【make/Makefile】Linux下进度条的设计与实现
【make/Makefile】Linux下进度条的设计与实现
|
数据可视化 小程序 Linux
【Linux】6. 实现进度条和git基本认识和使用
【Linux】6. 实现进度条和git基本认识和使用
126 4
|
6月前
|
监控 前端开发 小程序
陪练,代练,护航,代打小程序源码/前端UNIAPP-VUE2.0开发 后端Thinkphp6管理/具备家政服务的综合型平台
这款APP通过技术创新,将代练、家政、娱乐社交等场景融合,打造“全能型生活服务生态圈”。以代练为切入点,提供模块化代码支持快速搭建平台,结合智能匹配与技能审核机制,拓展家政服务和商业管理功能。技术架构具备高安全性和扩展性,支持多业务复用,如押金冻结、录屏监控等功能跨领域应用。商业模式多元,包括交易抽成、增值服务及广告联名,同时设计跨领域积分体系提升用户粘性,实现生态共生与B端赋能。
539 12
|
9月前
|
移动开发 小程序
thinkphp+uniapp开发的多端商城系统源码/H5/小程序/APP支持DIY模板直播分销
thinkphp+uniapp开发的多端商城系统源码/H5/小程序/APP支持DIY模板直播分销
346 0
|
11月前
|
小程序 前端开发 JavaScript
在线课堂+工具组件小程序uniapp移动端源码
在线课堂+工具组件小程序uniapp移动端源码
222 0
在线课堂+工具组件小程序uniapp移动端源码

热门文章

最新文章