当前位置: 首页 > wzjs >正文

网站侧导航网站问题seo解决方案

网站侧导航,网站问题seo解决方案,免费制作微信小程序的网站,设计网站推荐原因目录 1.前置知识 回车和换行 sleep函数 缓冲区的简单理解 fflush函数 usleep函数 2.预备实验:倒计时程序 3.进度条项目文件结构一览 预备 编写进度条 版本1 版本2:加上中括号 版本3:添加百分比 版本4:添加旋转光标动画 版本5:其他风格 gitee仓库代码 4.模拟进…

目录

1.前置知识

回车和换行

sleep函数

缓冲区的简单理解

fflush函数

usleep函数

2.预备实验:倒计时程序

3.进度条项目文件结构一览

预备

编写进度条

版本1

版本2:加上中括号

版本3:添加百分比

版本4:添加旋转光标动画

版本5:其他风格

gitee仓库代码

4.模拟进度条打印函数的调用

模拟带参的进度条函数

使用回调函数调用

知识回顾

download函数模拟下载过程

5.从pv命令项目看进度条显示函数的调用

复制文件时打印进度条显示进度

生成2GB的测试文件

使用pv命令复制测试文件

部分源代码分析


1.前置知识

回车和换行

回车和换行的复习:参见77.【C语言】文件操作(3)文章

注意:回车( \r )不等于换行( \n )

sleep函数

函数声明: unsigned int sleep(unsigned int seconds);

和Windows下的Sleep不同,Linux下的sleep函数首字母小写

man指令查询C语言sleep的内容:

 man 3 sleep #注意查的是3号手册(库调用)

 列出以下要点

1.头文件:<unistd.h>

2.参数:指定睡眠的秒数(unsigned int)

缓冲区的简单理解

以下代码在Linux的运行结果是什么?

#include <stdio.h>
#include <unistd.h>
int main()
{printf("test string");sleep(3);//睡眠3sreturn 0;
}

 答案:

会发现并没有先打印字符串,而是先睡眠3s

但程序又是从上到下依次执行的,因此字符串一定是先被保存起来了,这个被保存的地方称为缓冲区,是由C语言所维护的一段内存空间

如果想立刻看到字符串的打印结果可以使用fflush(stdout)强制刷新,因为显示器模式是行刷新,如果没有fflush函数,必须有\n才能刷新

fflush函数

(来自https://legacy.cplusplus.com/reference/cstdio/fflush/?kw=fflush) 

flush v.刷新 则fflush 将标准输出流(stdout)的输出缓冲区中的数据强制写入到目标输出设备(通常是终端或文件)中

注:IO流的有关内容参见75.【C语言】文件操作(2)文章

#include <stdio.h>
#include <unistd.h>
int main()
{printf("test string");fflush(stdout);sleep(3);//睡眠3sreturn 0;
}

运行结果:程序立刻打印了字符串,之后2s结束

usleep函数

函数声明:

int usleep(useconds_t usec);

简单来说,和sleep函数不同的地方在于参数的单位是微秒

2.预备实验:倒计时程序

#include <stdio.h>
#include <unistd.h>
int main()
{for (int i=10;i>=0;i--){printf("%-2d\r",i);//右对齐两格fflush(stdout);sleep(1);        }return 0;
}

注意: 1. \r是让光标回到本行开始处,为了覆盖前面的数字 2.必须设置位宽,右对齐两格,为了让数字正确显示

编译命令:

gcc检查比较严格,必须要带c99标准,否则for循环报错

gcc test.c -o test -std=c99

运行结果:

3.进度条项目文件结构一览

|- processbar.c  #含processbar函数的定义

|- processbar.h #含processbar函数的声明以及其他头文件

|- main.c #调用processbar函数

|- makefile #构建进度条项目

预备

//processbar.h
#pragma once
#include <stdio.h>
#include <unistd.h>
#include <string.h>
extern void processbar();//表明该函数在其他c文件中
#makefile
processbar:processbar.c main.c #没有写头文件,编译器会自动找gcc -o $@ $^
.PHONY:clean
clean:rm -f processbar
//main.c
#include <processbar.h>
int main()
{processbar();return 0;
}

编写进度条

稍微修改下预备实验写到 processbar.c中即可,几点要求:

1.将要输出的百分数存入buffer数组,每次循环打印buffer数组即可

2.buffer数组初始化时要清零

3.每次输出百分数后都回车(\r)

4.随着时间的流逝,尾插到buffer的进度条的部分会越来越多

5.0%打印0个#,100%打印100个#,而且有效字符串的结尾必须有\0,再预留一个安全字节因此buffer数组的大小为102个字节

版本1

#define CAPACITY 101
#define STYLE '#' //进度条的样式
void processbar()
{char buffer[CAPACITY];memset(buffer,'\0',sizeof(buffer));int cnt=0;while (cnt<=100){printf("%s\r",buffer);//必须带上\rfflush(stdout);buffer[cnt++]=STYLE;usleep(8000);}printf("\n");
}

运行结果:

版本2:加上中括号

改下printf即可,注意左对齐

printf("[%-100s]\r",buffer);

版本3:添加百分比

改下printf即可,%%解释为%

printf("[%-100s] %3d%%\r",buffer,cnt);

运行结果:

版本4:添加旋转光标动画

光标按顺时针旋转,动画依次为 \ | / -

可以定义一个字符数组animation来存储动画,依次播放即可

char* animation="\\|/-";//注意\\解释为一个反斜杠
字符\|/-
下标0123

 播放代码

//cnt%4余数在0~3之间,对应不同的动画字符
printf("[%-100s] %3d%% %c\r",buffer,cnt,animation[cnt%4]);

也可以将4代换成animation_len,s其值为strlen(animation) 

运行结果:

版本5:其他风格

例如实现这个的风格  [======>                       ] ??%

 ======>分为两个部分,一个是由=组成的进度条的主要部分,一个是单个的>

定义STYLE和HEAD:

#define STYLE '='
#define HEAD '>'

改变对buffer尾插的方式:

buffer[cnt++]=STYLE;
buffer[cnt]=HEAD;

稍微修改下printf

printf("[%-101s] %3d%%\r",buffer,cnt);//buffer的1最后一个安全字节留给>

运行结果:

或者到100%时删除>

 在循环结束时添加以下代码即可:

cnt--;//cnt变成100
buffer[cnt]=STYLE;
buffer[cnt+1]='\0';
printf("[%-101s] %3d%%\r",buffer,cnt);
fflush(stdout);

运行结果:

gitee仓库代码

https://gitee.com/zhangz6/c-code/tree/master/linux%E8%BF%9B%E5%BA%A6%E6%9D%A1%E4%BB%A3%E7%A0%81

4.模拟进度条打印函数的调用

使用yum或apt安装软件包时会打印进度条,简单来讲是将软件下载的百分比传递给processbar函数

而项目中传给进度条显示函数的参数往往较为复杂,参见下方对pv命令项目的部分源代码的解析 

模拟带参的进度条函数

那就不能使用内部循环,rate的大小是由外部告知的

char buffer[CAPACITY];//全局
void processbar(int rate)
{memset(buffer,'\0',CAPACITY);buffer[rate++]=STYLE;printf("[%-101s] %3d%%\r",buffer,rate);fflush(stdout);
}

使用回调函数调用

知识回顾

回调函数复习参见46.【C语言】指针(重难点)(I)文章

download函数模拟下载过程

#include "processbar.h"
typedef void (*callback_func)(int);//函数指针,返回值为void,参数是int
void download(callback_func cbf)
{int total=5000;int cur=0;while (cur<=total){usleep(8000);int rate=cur/total;cbf(rate);cur+=500;}
}int main()
{download(processbar);return 0;
}

运行结果:

5.从pv命令项目看进度条显示函数的调用

pv命令是一个开源的项目,其全称为pipe viewer,为管道查看器

官方网站:https://www.ivarch.com/programs/pv.shtml

其中有一个功能是调用进度条显示函数,以下面这个例子说说使用方法

复制文件时打印进度条显示进度

使用cp命令复制文件时不会显示复制的进度,可以使用pv命令来查看复制的进度

生成2GB的测试文件

先生成2GB的测试文件用于之后的复制

#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
int main()
{FILE* ptr = fopen("test.bin", "wb+");unsigned long long size = 0;unsigned int num=0;while (size < 1024 *1024*512)//2GB{//size_t fwrite(const void *ptr, size_t size, size_t count, FILE *stream);fwrite(&num, 4, 1, ptr);num++;size++;}fclose(ptr);return 0;
}

使用pv命令复制测试文件

安装pv命令

sudo yum install pv #CentOS RedHat
sudo apt install pv #Ubuntu

从官网给出的说明来看,-p选项可以加上进度条,-e可以显示预计到达时间ETA(EstimatedTimeofArrival)

pv test.bin > test_bak.bin -p -e

 运行结果:

gif的字比较小,视频观看:

进度条演示

部分源代码分析

 以最新版本1.9.31为例分析,官网的下载速度很慢,这里给出下载链接:https://pan.baidu.com/s/19k7MR8QDKEWAm-v5RyYBXA?pwd=pxgy,提取码: pxgy 

进度条显示函数pv_display在pv-1.9.31/src/pv/display.c下

void pv_display(pvstate_t state, bool final)

 pvstate_t是自定义类型,是pvstate_s结构体的指针,而pvstate_s结构体的定义在pv-internal.h下.用于表示pv内部的状态

pvstate_s结构体的内部嵌套了几个匿名结构体,分别用于表示程序状态、输入的文件、程序控制、信号处理、Transient标记、显示状态、计算传输时需要的状态和Cursor/IPC状态等等

可以看到有之前提到的rate

http://www.dtcms.com/wzjs/560704.html

相关文章:

  • 如何做网站的主页珠海模板建站定制网站
  • 富阳做网站公司工程信息网哪个好
  • 药业集团网站建设方案移动互联网开发好就业吗
  • 怎样做微信推广网站公司网站制作效果
  • 建站平台一键申请三方支付通道正规免费发布信息网站
  • 怎样在手机上做自己的网站做网站时搜索的代码是什么
  • 制作企业网站的建设单位网站设计
  • 上海网站seo手机如何创建简易网站
  • 杭州优化网站c2c网站建设的需求分析
  • 将电脑做的网站放到外网上海市质量工程建设管理协会网站
  • 全国网站建设汇编wordpress邮箱失败
  • 网站的版面设计竞价账户托管
  • 网站模板制作与安装教程视频教程溧阳市住房和城乡建设局网站
  • 好看云在线网站模板python编程自学网
  • 做网站与全网营销搜索推广排名优化做响应式网站设计师需要做什么
  • 三五互联网站报价表门户网站开发要多久
  • 上海建设工程网站购物网站制作公司
  • 张家港网站建设价格国家高新技术企业证书
  • 快速建立平台网站开发网站模板设计泰州市建设工程招标网
  • 珠海免费模板建站山东环保行业网站开发
  • 母婴网站源码 带采集行业网站建设
  • 电商网站建设会计分录广州网站建设定制多少钱
  • asp做网站的优势是什么seoheuni
  • 政务网站建设电商网站cms
  • 网站点击量与排名网站建设零基础好学吗
  • 营销网站建设企划案例江苏营销型网站
  • 厦门中小企业建网站补助网络营销试卷
  • 上海中小企业网站建设wordpress istyle2
  • 购物网站 怎么做网络推广计划的三个步骤
  • h5制作的炫酷个人网站市场营销策划书