四、Linux(缓冲区、进度条、升级Makefile)

缓冲区

回车与换行

首先区分一下回车换行的含义:
基准图:
在这里插入图片描述
基准换行后
在这里插入图片描述
基准回车后
在这里插入图片描述
基准回车换行后
在这里插入图片描述

缓冲区

概念:缓冲区是在内存中预留指定的大小存储空间,用来对I/O的数据做临时存储。
使用缓冲区有以下好处:

  • 减少实际物理读写次数;
  • 缓冲区在创建时就被分配,并且这块空间可以被重复利用,从而减少动态分配和回收内存的次数。

下面从这个例子看一下缓冲区:
在这里插入图片描述
出现上述的结果是因为刷新的策略不同导致的。左边执行的是行刷新,然而右边执行的是程序结束时刷新

刷新策略有:

  • 行刷新(标志:\n)
  • 程序结束时刷新
  • 强制刷新
  • 文件关闭时刷新

关于强制刷新,一般使用fflush函数来实现。通过下面程序来学习强制刷新。

缓冲区分类

  • 无缓冲
    不进行缓冲,如stderr的错误信息显示。
  • 行缓冲
    printf(“hello\n”);
  • 全缓冲
    当填满标准I/O缓存后才进行实际I/O操作。典型代表就是对磁盘文件的读写。

进度条

实现效果

在这里插入图片描述

注意事项

  1. 进度条的刷新方式采\r,回车式;
  2. 采用强制刷新fflush(stdout),强制刷新标准输出

代码

proc.h

#pragma  once 

#include<stdio.h>
#include<string.h>
#include<unistd.h>
#define NUM 101

extern void proc();

proc.c

#include"proc.h"

void proc()
{
  int i=0;
  char buf[NUM]= {0};  
  const char* lable="|/-\\";
  
  while(i<100)
  {
    fflush(stdout);//强制刷新
    buf[i++]='=';
    usleep(3000000);
    //注意格式控制
    printf("[%-101s][%3d%%][%c]\r",buf,i,lable[i%4]);// 往显示器打印需要行刷新
  }
  printf("\n");
}

main.c

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

Makefile 写法

针对上面的进度条程序,这里给出Makefile文件的写法,使用了一些简单命令。

cc=gcc  # 变量定义式的makefile
bin=proc 
my_file=main.o proc.o

$(bin):$(my_file)
	$(cc) -o $@ $^

%.o:%.c
	$(cc) -c $<

.PHONY:clean
clean:
	rm -rf  $(bin) $(my_file)
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值