【Linux】7:第一个系统程序-进度条
📅 2026/7/5 3:40:23
👁️ 次浏览
目录一、补充回车和换行知识二行缓冲区三、倒计时程序四、进度条程序4.1 version14.1.1 makefile文件4.1.2 process.h文件4.1.3 process.c文件4.1.4 main.c文件4.1.5 运行4.2 version24.2.1 makefile文件4.2.2 process.h文件4.2.3 process.c文件4.2.4 main.c文件4.2.5 运行一、补充回车和换行知识换行指的是从当前这一行到下一行的当前位置如下所示回车指的是到本行的开头位置如下所示回车换行如下所示换行是\n,回车是\r.\r\n表示回车换行。在我们写的c语言代码中的\n它指的是\r\n也就是回车换行编译器处理了一下。二行缓冲区我们来看如下代码我们先打印一个字符串然后在睡眠3秒执行之后我们发现会先输出一个字符串然后等待3秒之后程序就结束了。现在我们将\n给去掉然后运行如下所示我们发现运行之后是先睡眠3秒然后在打印出hello world的这是为什么呢我们写的程序应该是顺序执行的应该是先打印出hello world然后睡眠3秒结束程序的。这是因为我们打印hello world是先被输出到缓冲区中了然后再次睡眠3秒结束程序当程序结束之后会自动刷新缓冲区将缓冲区的内容输入到屏幕。那为什么第一个程序会先打印出hello world呢这是因为\n会刷新缓冲区。如果想要让不带\n的字符串立马刷新到屏幕呢我们可以使用fflush来刷新输出缓冲区如下所示三、倒计时程序四、进度条程序4.1 version14.1.1 makefile文件4.1.2 process.h文件1 #pragma once 2 3 #includestdio.h 4 5 void process_v1();4.1.3 process.c文件1 #include process.h 2 #includestring.h 3 #includeunistd.h 4 5 #define NUM 101 6 #define STYLE # 7 8 void process_v1() 9 { 10 char buffer[NUM]; 11 memset(buffer,0,sizeof(buffer)); 12 const char* lable|/-\\; 13 int lenstrlen(lable); 14 int cnt0; 15 while(cnt100) 16 { 17 printf([%-100s][%d%%][%c]\r,buffer,cnt,lable[cnt%len]); 18 fflush(stdout); 19 buffer[cnt]STYLE; 20 usleep(10000); 21 cnt; 22 } 23 printf(\n); 24 }4.1.4 main.c文件1 #include process.h 2 3 int main() 4 { 5 process_v1(); 6 return 0; 7 } ~4.1.5 运行4.2 version2在上面的我们进度条的代码是无法使用的例如我们下载一个文件我们是运行下载程序还是进度条程序呢一个进度条是需要结合场景的一边下载一边更新进度条。4.2.1 makefile文件4.2.2 process.h文件1 #pragma once 2 3 #includestdio.h 4 5 void FlushProcess(double total,double current); 6 void process_v1();4.2.3 process.c文件1 #include process.h 2 #includestring.h 3 #includeunistd.h 4 5 #define NUM 101 6 #define STYLE # 7 8 //version2 9 void FlushProcess(double total,double current) 10 { 11 char buffer[NUM]; 12 memset(buffer,0,sizeof(buffer)); 13 const char* label|/-\\; 14 int lenstrlen(label); 15 static int cnt0; 16 //不需要自己循环循环代码在下载里面 17 //填充# 18 int num(int)(current*100/total); 19 for(int i0;inum;i) 20 { 21 buffer[i]STYLE; 22 } 23 double ratecurrent/total; 24 cnt%len; 25 printf([%-100s][%.1lf%%][%c]\r,buffer,rate*100,label[cnt]); 26 cnt; 27 fflush(stdout); 28 } 29 //version1 30 void process_v1() 31 { 32 char buffer[NUM]; 33 memset(buffer,0,sizeof(buffer)); 34 const char* lable|/-\\; 35 int lenstrlen(lable); 36 int cnt0; 37 while(cnt100) 38 { 39 printf([%-100s][%d%%][%c]\r,buffer,cnt,lable[cnt%len]); 40 fflush(stdout); 41 buffer[cnt]STYLE; 42 usleep(10000); 43 cnt; 44 } 45 printf(\n); 46 }4.2.4 main.c文件1 #include process.h 2 #include stdio.h 3 #include unistd.h 4 double total1024.0; 5 double speed1.0; 6 7 void DownLoad() 8 { 9 double current0; 10 while(currenttotal) 11 { 12 FlushProcess(total,current); 13 //下载代码 14 usleep(3000); //充当下载数据 15 currentspeed; 16 } 17 printf(\ndownload %.2lfMB Done\n,current); 18 } 19 int main() 20 { 21 DownLoad(); //下载软件1 22 DownLoad(); //下载软件2 23 DownLoad(); //下载软件3 24 DownLoad();//下载软件4 25 DownLoad();//下载软件5 26 return 0; 27 }4.2.5 运行
口碑靠前的增强免疫维d产品盘点,是不少需要提升免疫力、补充维生素D的消费者关注的选购参考,本次盘点综合产品合规性、成分搭配、用户真实口碑、品牌生产资质多个维度,整理出5款市场认可度较高的产品,供不同需求的消费者参考。本次…
📅 2026/7/5 3:40:23
Python 3.11 数据科学实战:5步构建批判性思维分析框架,识别数据偏见在数据驱动的决策时代,我们常常陷入一种危险的错觉——认为数字不会说谎。但正如统计学家George Box所言:"所有模型都是错的,只是有些有用。&qu…
📅 2026/7/5 3:40:23
私域流量这个概念这几年有多火,不用我多说。但很多企业在落地私域电商系统时,往往会陷入两个极端:要么上来就搞微服务、分布式事务,结果项目半年没上线;要么功能堆砌一堆,直播、分销、秒杀全都要࿰…
📅 2026/7/5 3:40:23
🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 上周处理一批老照片时,我遇到了一个典型的两难问题:几张珍贵的合影被角落的水印破坏了,而另几张则…
📅 2026/7/5 4:44:29
HTML转Figma深度解析:如何将网页完美转换为可编辑设计稿 【免费下载链接】figma-html Convert any website to editable Figma designs 项目地址: https://gitcode.com/gh_mirrors/fi/figma-html
你是否曾面对一个精美的网页设计,希望能够直接在F…
📅 2026/7/5 4:44:29
一、背景对数据库有了解的同学都知道数据库的连接并不是无限的,在开发实践中必然要面对Engine、Connection生命周期的管理,如何创建全局的事例,连接线程不会无节制的膨胀就是这账要讲的内容二、如何创建全局实例以FastApi为例在main界面创建连…
📅 2026/7/5 4:44:29
PCL启动器:10分钟快速上手,打造你的专属Minecraft世界 【免费下载链接】PCL Minecraft 启动器 Plain Craft Launcher(PCL)。 项目地址: https://gitcode.com/gh_mirrors/pc/PCL
你是否曾经因为复杂的Minecraft启动流程而头…
📅 2026/7/5 4:44:29
🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 如果你是一名开发者,最近在尝试构建自己的AI应用,或者正在为团队寻找一个高效、低成本的本地AI解决方案&#…
📅 2026/7/5 4:44:29
1. 项目概述:为什么一个Join能卡住整个Spark作业的命脉“PySpark Joins: Optimize Big Data Join Performance”——这个标题里没有花哨的新概念,没有炫目的AI前缀,但它直击所有在真实生产环境里跑过Spark任务的人最深的痛处:明明…
📅 2026/7/5 4:42:29
1. 项目背景与核心需求 在嵌入式系统开发中,快速精确的数据检索是一个常见但极具挑战性的需求。特别是在工业控制、医疗设备和物联网终端等场景下,系统往往需要在毫秒级时间内完成关键参数的读取和写入操作。传统基于Flash存储的方案存在擦写次数有限、操…
📅 2026/7/5 0:01:51
1. 工业电流环信号传输的基础认知在工业自动化领域,4-20mA电流环传输技术已经持续服役超过半个世纪。这种看似简单的信号传输方式之所以能经久不衰,核心在于其独特的抗干扰能力——电流信号在长距离传输时几乎不受线路电阻和电压波动的影响。我曾在化工厂…
📅 2026/7/5 0:01:51
最近在项目里尝试用 YOLO 做目标检测,从环境搭建到模型训练,再到推理部署,整个过程踩了不少坑。网上的资料虽然多,但要么版本老旧,要么步骤零散不成体系,对于刚入门的新手来说,很容易卡在某个环…
📅 2026/7/5 0:01:51
1. 项目背景与核心需求 在嵌入式系统开发中,快速精确的数据检索是一个常见但极具挑战性的需求。特别是在工业控制、医疗设备和物联网终端等场景下,系统往往需要在毫秒级时间内完成关键参数的读取和写入操作。传统基于Flash存储的方案存在擦写次数有限、操…
📅 2026/7/5 0:01:51
1. 工业电流环信号传输的基础认知在工业自动化领域,4-20mA电流环传输技术已经持续服役超过半个世纪。这种看似简单的信号传输方式之所以能经久不衰,核心在于其独特的抗干扰能力——电流信号在长距离传输时几乎不受线路电阻和电压波动的影响。我曾在化工厂…
📅 2026/7/5 0:01:51
最近在项目里尝试用 YOLO 做目标检测,从环境搭建到模型训练,再到推理部署,整个过程踩了不少坑。网上的资料虽然多,但要么版本老旧,要么步骤零散不成体系,对于刚入门的新手来说,很容易卡在某个环…
📅 2026/7/5 0:01:51
目录
第一步:选对模板,省心一半
第二步:打开扫码点餐功能
开启功能按钮
桌台管理与桌码生成
第三步:个性化设计,打造品牌感
调整点餐页面
设置点餐规则 你还在让顾客站着排队点餐吗?2025年ÿ…
📅 2026/7/4 5:07:51
在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…
📅 2026/7/4 5:10:18
FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE
你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…
📅 2026/7/4 17:36:47