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

Posted yumoz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了四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)

以上是关于四Linux(缓冲区进度条升级Makefile)的主要内容,如果未能解决你的问题,请参考以下文章

LinuxLinux下的自动化构建工具——make/makefile

LinuxLinux项目自动化构建工具make makefile

Linux小练习进度条程序

Linux环境使用make与Makefile实现进度条

Linux下的第一步——进度条(gcc&Makefile)

linux 进度条的实现及makefile的简单应用