Linux---对缓冲区的简单理解--第一个系统程序

news2025/2/28 3:03:37

前序:

首先先理解一下什么是回车与换行;回车和换行是两个概念,它们不是一个东西;

  • 回车:光标回到开始;
  • 换行:换到下一行;

如下图:

行缓冲区

如何理解缓冲区问题?

可以认为,缓冲区就是一块内存块,有的输出的内容会先这个缓冲区中,在缓冲区刷新时一起输出到输出端;如下图

如果想让他立马刷新打印怎么办?

printf 的底层就是stdout,也就是fprintf(stdout,"hello world"),所以直接刷新stdout就好了;

 只回车,不刷新?简单倒计时

实践--倒计时程序

version-1 

process.h

#pragma once
#include<stdio.h>

void FFlushProcess(double current, double total);
void process_v1();

 process.c

 
     #include<string.h>
     #include<unistd.h>
     #include"process.h"
     
     #define NUM 101
     #define SSTYLE '='

    void prcess_v1()
    {
      char buffer[NUM];
      memset(buffer, 0, sizeof(buffer));
      char* lable = "|/-\\";
      int len = strlen(lable);
      int cnt = 0;
      while(cnt <= 100)
      {
        printf("[%-100s][%d%%][%c]\r", buffer, cnt, lable[cnt%len]);
        fflush(stdout);
        buffer[cnt] = SSTYLE;
        cnt++;
        usleep(3000);
      }
      printf("\n");
    }     

main.c

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

int main()
{
    process_v1();
    return 0;
{

version-2

process.h

#pragma once
#include<stdio.h>

void FFlushProcess(double current, double total);
void process_v1();

process.c

     #include<string.h>
     #include<unistd.h>
     #include"process.h"
     
     #define NUM 101
     #define SSTYLE '='    

    void FFlushProcess(double current, double total)                                                                                                                                                         
    {                                                                                                                                                         
      char buffer[NUM];                                                                                                                                                         
      memset(buffer, 0, sizeof(buffer));                                                                                                                                                         
                                                                                                                                                             
      const char* lable = "|\\-/";                                                                                                                                                         
      int len = strlen(lable);                                                                                                                                                         
      double rate = current / total;                                                                                                                                                         
      int cnt = rate * 100;                                                                                                                                                         
                                                                                                                                                             
      int i = 0;                                                                                                                                                         
      for(;i < cnt; i++)                                                                                                                                                         
      {                                                                                                                                                         
        buffer[i] = SSTYLE;                                                                                                                                                         
      }                                                                                                                                                         
      printf("[%-100s][%lf%%][%c]\r", buffer, rate*100, lable[cnt%len]);                                                                                                                                                         
      fflush(stdout);                                                                                                                                                         
    }                                                                                                                                                         
         

main.c

    #include"process.h"
    #include<stdio.h>
    
    double speed = 1.0;
    double total = 1024.0;
    
    void DownLoad()
    {
      double current = 0;
      while(current <= total)
      {
        FFlushProcess(current, total);
        usleep(3000);   //下载的数据 
        current += speed;
      }
      printf("\ndownload %.2lfMB Done\n", current);
    
    }
    
    int main()
    {                                                                                                                                                                                                                             
      DownLoad();
      //prcess_v1();
      return 0;
    }

 结果:倒计时符的打印结果

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

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

相关文章

一文掌握 OpenGL 几何着色器的使用

学习本文需要具备 OpenGL ES 编程基础,如果看起来比较费劲,可以先看入门文章 OpenGL ES 3.0 从入门到精通系统性学习教程 。 什么是几何着色器 几何着色器(Geometry Shader) OpenGL 管线中的可选着色器阶段,位于顶点着色器(Vertex Shader) 和光栅化阶段 之间。 其核心…

Java-22 深入浅出 MyBatis - 手写ORM框架3 手写SqlSession、Executor 工作原理

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 大数据篇正在更新&#xff01;https://blog.csdn.net/w776341482/category_12713819.html 目前已经更新到了&#xff1a; MyBatis&#xff…

vite5+vue3+Ts5 开源图片预览器上线

images-viewer-vue3&#xff1a;一款Vue3的轻量级图像查看器&#xff0c;它基于Flip动画技术&#xff0c;支持PC和h5移动网页预览照片&#xff0c;如果它是Vue3开发的产品。 npm开源地址:https://www.npmjs.com/package/images-viewer-vue3?activeTabreadme Flip 动画 < …

再用RNN神经网络架构设计生成式语言模型

上一篇&#xff1a;《用谷歌经典ML方法方法来设计生成式人工智能语言模型》 序言&#xff1a;市场上所谓的开源大语言模型并不完全开源&#xff0c;通常只提供权重和少量工具&#xff0c;而架构、训练数据集、训练方法及代码等关键内容并未公开。因此&#xff0c;要真正掌握人…

阿里云轻量应用服务器开放端口,图文教程分享

阿里云轻量应用服务器如何开放端口&#xff1f;在轻量服务器管理控制台的防火墙中添加规则即可开通端口&#xff0c;开通80端口就填80&#xff0c;开通443就填443端口&#xff0c;开通3306端口就填3306。阿里云百科网aliyunbaike.com整理阿里云轻量应用服务器端口号开通图文教程…

微服务网关SpringCloudGateway、Kong比较

网关产品 1. Spring Cloud Gateway 基本信息 Spring Cloud Gateway是Spring Cloud生态系统中的一个组件&#xff0c;基于Spring 5、Project Reactor和Spring Boot 2构建。它旨在为微服务架构提供一种简单而有效的API网关解决方案。 功能特点 路由功能强大&#xff1a;使用Rou…

第十七届山东省职业院校技能大赛 中职组“网络安全”赛项资源任务书样题②

第十七届山东省职业院校技能大赛 中职组“网络安全”赛项资源任务书样题② 模块A 基础设施设置与安全加固(200分)A-1 登录安全加固&#xff08;Windows, Linux&#xff09;A-2 Nginx安全策略&#xff08;Linux&#xff09;A-3日志监控&#xff08;Windows&#xff09;A-4中间件…

运维实战:K8s 上的 Doris 高可用集群最佳实践

今天我们将深入探讨&#xff1a;&#xff1a;如何在 K8s 集群上部署 Compute storage coupled&#xff08;存算耦合&#xff09; 模式的 Doris 高可用集群&#xff1f; 本文&#xff0c;我将为您提供一份全面的实战指南&#xff0c;逐步引导您完成以下关键任务&#xff1a; 配…

【数据库】E-R模型、函数依赖、范式

2. 东方货运公司数据库的样本数据如下。 表名称&#xff1a;卡车 车号 货运站编号 类型 总行程 购入日期 1001 501 1 59002.7 11/06/2000 1002 502 2 54523.8 11/08/2000 1003 501 2 32116.6 09/29/2001 1004 502 2 3256.9 …

Socket编程-tcp

1. 前言 在tcp套接字编程这里&#xff0c;我们将完成两份代码&#xff0c;一份是基于tcp实现普通的对话&#xff0c;另一份加上业务&#xff0c;client输入要执行的命令&#xff0c;server将执行结果返回给client 2. tcp_echo_server 与udp类似&#xff0c;前两步&#xff1…

NRBO-BiTCN时序预测 | Matlab基于NRBO-BiTCN牛顿拉夫逊算法优化双向时间卷积网络时间序列预测

NRBO-BiTCN时序预测 | Matlab基于NRBO-BiTCN牛顿拉夫逊算法优化双向时间卷积网络时间序列预测 目录 NRBO-BiTCN时序预测 | Matlab基于NRBO-BiTCN牛顿拉夫逊算法优化双向时间卷积网络时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matlab基于NRBO-BiTCN时序…

基于大数据爬+数据可视化的民族服饰数据分析系统设计和实现(源码+论文+部署讲解等)

博主介绍&#xff1a;CSDN毕设辅导第一人、全网粉丝50W,csdn特邀作者、博客专家、腾讯云社区合作讲师、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术范围…

Bean的注入、单例和多例

目录 注入Bean对象 属性注入 构造注入 属性注入专题 注入集合/数组 级联简单类型赋值 Bean的单例和多例 注入Bean对象 简单类型使用value(除Date)&#xff0c;非简单类型使用ref 属性注入 name规则&#xff1a;必须提供set方法&#xff0c;去掉set&#xff0c;第一个字…

【Ubuntu】清理、压缩VirtualBox磁盘空间大小

1、说明 本人为虚拟机创建了两个硬盘:root.vdi 和 hoom.vdi,在创建虚拟机时,分别挂载在/root目录和/home目录下。 下面演示分别清理、压缩两个磁盘的空间。 2、清理空间 1)清理 root.vid sudo dd if=/dev/zero of=/EMPTY bs=1M;sudo rm -f /EMPTY输出信息中会提示,如…

计算生成报价单小程序系统开发方案

计算生成报价单小程序报价系统&#xff0c;是根据商品品牌、类型、型号、规格、芯数、特性、颜色、分类进行选择不同的参数进行生成报价单&#xff0c;要求报价单支持生成图片、pdf、excel表格。 计算生成报价单小程序系统的主要功能模块有&#xff1a; 1、在线生成报价单&…

Git基础操作快速入门

Git是一个免费开源分布式版本控制工具&#xff0c;是由Linux的作者Linus开发的第二个伟大作品。2005年由于BitKeeper软件公司对Linux社区停止了免费使用权。Linus迫不得己自己开发了一个分布式版本控制工具&#xff0c;从而Git诞生了 目前使用Git作为版本控制的开源软件&#…

Android APP跳转到另一个APP

1. Android APP跳转到另一个APP 从当前APP去全新启动另外一个目标APP&#xff08;非覆盖同一个进程&#xff09; 1.1. 启动另外一个目标APP&#xff08;非覆盖原来APP的方式&#xff09; &#xff08;1&#xff09;当前APP加入获取权限声明&#xff1a;&#xff08;不加入权限…

云服务的flow流水线中项目配置与运行的错误解决

在阿里云的 **Flow** 流水线中&#xff0c;遇到 "codeup服务连接已失效" 错误通常是由于 **阿里云 Codeup**&#xff08;阿里云的 Git 仓库服务&#xff09;与流水线之间的连接中断导致的。这种问题一般可以通过以下几个步骤来解决&#xff1a; ### 1. **检查 Codeu…

PHP富文本编辑器eWebEditor实战指南

本文还有配套的精品资源&#xff0c;点击获取 简介&#xff1a;eWebEditor是一个基于PHP的开源在线文本编辑器&#xff0c;提供类似Word的用户界面&#xff0c;简化了网页文本的创建和编辑过程。它广泛适用于博客、论坛、CMS等平台的内容管理&#xff0c;具备富文本编辑、表格…

flink yarn模式3种提交任务方式

接上文&#xff1a;一文说清flink从编码到部署上线 1.引言 Apache Hadoop的Yarn是许多数据处理框架中非常流行的资源提供者。Flink的服务提交给Yarn的ResourceManager后&#xff0c;ResourceManager会在由Yarn的NodeManager管理的机器上动态分配运行容器。Flink在这些容器上部…