【Linux 进度条小程序】缓冲区+回车换行

文章目录

回车与换行

回车和换行是不同的两个概念
回车\r 使光标回到本行行首。
换行\n使光标下移一格。

一般我们的键盘上的Enter键是回加换行键

在c语言中
\n 表示回车+换行 效果和Enter键一样


\r 使光标回到本行行首。

缓冲区

缓冲区buffer: 它是内存空间的一部分。也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区,显然缓冲区是具有一定大小的。

缓冲区根据其对应的是输入设备还是输出设备,分为输入缓冲区和输出缓冲区。

举个栗子


第一个例子是先打印Hello World 在等待两秒结束程序

第二个例子比第一个例子少一个\n,则是先等待两秒后在打印Hello World

  • 这两个例子就可以用来证明缓冲区的存在,在第二个例子中,printf函数肯定先执行,然后再执行sleep函数。
  • 但是printf先执行,并不是执行完就打印到显示器上。而是先将打印的内容存放到缓冲区中,等到程序运行结束才打印到显示器中
  • 第一个例子是因为当缓冲区中遇到'\n'或是缓冲区被写满就会被打印出来。不会等到程序结束才打印。

fflush函数

刷新缓冲区

在上面第二个例子中除了加\n可以实现 先打印Hello World 再等待两秒结束程序;还可以使用fflush函数刷新缓冲区完成

倒计时小程序

了解了上面的三个概念后可以简单的实现一个倒计时小程序

c 复制代码
#include<stdio.h>                                                      
#include<unistd.h>    
int main()    
{    
  int cout = 9;    
  while(cout >= 0)    
  {    
     printf("%d\r",cout--);    
     fflush(stdout);    
     sleep(1);    
  }    
  return 0;    
} 

如果没有fflush函数刷新缓冲区,那么打印的结果会一直存到缓冲区中,程序结束了什么也看不到

进度条小程序

c 复制代码
#include<stdio.h>    
#include<unistd.h>    
#include <string.h>    
int main()    
{    
  int i = 0;    
  char buff[102];    
  memset(buff,0,sizeof(buff));    
  while(i <= 100 )    
  {                                                                                                                                              
    printf("[%-100s][%d%%]\r",buff,i);    
    fflush(stdout);    
    buff[i++] = '#';    
    usleep(100000);    
  }    
  printf("\n");    
  return 0;    
}
相关推荐
腾渊信息科技公司11 小时前
工业数据运维痛点根治方案:基于AI Agent的产线自动化台账系统落地
运维·人工智能·自动化·个人开发·ai编程
Dxy123931021611 小时前
Proxy Protocol v2 详解
运维
踏月的造梦星球11 小时前
DMDPC 学习:架构、部署、运维与调优
运维·数据库·学习·架构
潘正翔12 小时前
docker核心概念
linux·运维·服务器·docker·容器·centos·运维开发
weigangwin12 小时前
agent-workspace-linux 不是远程桌面:Linux AI 工作区的隔离边界验收
linux·xvfb·mcp·桌面隔离·权限边界·bubblewrap·agent-workspace
renhongxia112 小时前
世界模型,是“空中楼阁”还是AGI的“最后一块拼图”?
运维·服务器·数据库·人工智能·算法·agi
Dovis(誓平步青云)14 小时前
远程办公软件文件传输实测:6 款工具的速度、稳定性和办公体验对比
linux·运维·服务器·后端·生成对抗网络
Java小白笔记14 小时前
Docker 安装配置完全指南:MacOS 、Windows、Linux环境下的安装、配置与验证
linux·macos·docker
csdn_aspnet15 小时前
GitHub Actions自动化运维实战,用CI/CD流水线实现测试、部署、安全扫描一体化
运维·安全·ci/cd·自动化·github
Inhand陈工16 小时前
数据中心UPS无功补偿与智能化监控方案:基于IG502的Modbus RTU转IEC61850实战
运维·人工智能·物联网·信息与通信