四Linux(缓冲区进度条升级Makefile)
Posted yumoz
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了四Linux(缓冲区进度条升级Makefile)相关的知识,希望对你有一定的参考价值。
快速定位
缓冲区
回车与换行
首先区分一下回车和换行的含义:
基准图:
基准换行后:
基准回车后:
基准回车换行后:
缓冲区
概念:缓冲区是在内存中预留指定的大小存储空间,用来对I/O的数据做临时存储。
使用缓冲区有以下好处:
- 减少实际物理读写次数;
- 缓冲区在创建时就被分配,并且这块空间可以被重复利用,从而减少动态分配和回收内存的次数。
下面从这个例子看一下缓冲区:
出现上述的结果是因为刷新的策略不同导致的。左边执行的是行刷新,然而右边执行的是程序结束时刷新。
刷新策略有:
- 行刷新(标志:\\n)
- 程序结束时刷新
- 强制刷新
- 文件关闭时刷新
关于强制刷新,一般使用fflush函数来实现。通过下面程序来学习强制刷新。
缓冲区分类:
- 无缓冲
不进行缓冲,如stderr的错误信息显示。 - 行缓冲
printf(“hello\\n”); - 全缓冲
当填满标准I/O缓存后才进行实际I/O操作。典型代表就是对磁盘文件的读写。
进度条
实现效果
注意事项
- 进度条的刷新方式采\\r,回车式;
- 采用强制刷新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