回车,换行概念
\n:回车,换行
回车:回到最开始
换行:回到最新的一行
缓冲区概念
#include <stdio.h>
int main()
{
printf("hello Makefile!\n");
sleep(3);
return 0;
}
#include <stdio.h>
int main()
{
printf("hello Makefile!");
sleep(3);
return 0;
我们在运行的时候会发现两段代码第一段 字符串先出来然后休眠三秒,第二段先休眠三秒再打印字符串
在我sleep期间,字符串在哪里?
缓冲区:内存空间,我们先这么理解,后面深入学习的时候我们再具体学习
程序结束的时候,一般要自动冲刷缓冲区
\n,\n之前的字符串立即刷新
缓冲区满了,自动刷新,暂时不考虑
强制刷新
flush stream 特定的文件流的数据进行刷新
linux下一切皆文件,显示器自然也可以当一个文件来看待
我们c语言在程序运行的时候会为我们默认打开三个标准的输入输出流
stdin: 键盘
stdout stderr显示器
进度条代码
typedef void(*callback_t)(double,double);
#include"Processbar.h"
#include<string.h>
#include<unistd.h>
void ProcBar(double total,double current)
{
char bar[Length];
//初始化,全部设置为指定的值,全是/0
memset(bar,'\0',sizeof(bar));
int len=strlen(lable);
int cur=0;
double rate=(current*100.0)/total;
//循环次数
int loop_count=(int)rate;
while(cur<=loop_count)
{
bar[cur++]=Style;
}
printf("[%-100s][%.1lf%%][%c]\r",bar,rate ,lable[cur%len]);
fflush(stdout);
}
double filesize =100*1024*1024*1.0;
void download(double filesize,callback_t cb)
{
// //文件的大小
// double filesize =100*1024*1024*1.0;
//累计下载的数据量
double current =0.0;
//带宽网速
double bandwidth=1024*1024*1.0;
printf("download begin,current:%lf\n",current);
while(current<=filesize)
{
cb(filesize,current);
//从网络中获取数据
current+=bandwidth;
usleep(100000);
}
printf("\ndownload done,filesize:%lf\n",filesize);
}
int main()
{
download(filesize,ProcBar);
download(2*1024*1024,ProcBar);
download(4*1024*1024,ProcBar);
return 0;
}