红联Linux门户
Linux帮助

Wget下载进度条是如何实现的?

发布时间:2016-10-04 11:59:46来源:WBZH的专栏作者:WBZH
自从有一次用过wget后对它如何实现以下这样的进度条有些兴趣,当然做为一个不入流的程序员心里也是有自己的想法。
Wget下载进度条是如何实现的?
Wget下载进度条是如何实现的?
Wget下载进度条是如何实现的?
上图是wget进度条变化。
 
今天搜索到wget老家https://www.gnu.org/software/wget/,下载了1.9的源码,找到progress.c。
 
/* The progress bar: "[====>      ]" or "[++==>      ]". */
/* Size of the initial portion. */
int insz = (double)bp->initial_length / bp->total_length * progress_size;
/* Size of the downloaded portion. */
int dlsz = (double)size / bp->total_length * progress_size;
char *begin;
int i;
assert (dlsz <= progress_size);
assert (insz <= dlsz);
*p++ = '[';
begin = p;
/* Print the initial portion of the download with '+' chars, the
rest with '=' and one '>'.  */
for (i = 0; i < insz; i++)
*p++ = '+';
dlsz -= insz;
if (dlsz > 0)
{
for (i = 0; i < dlsz - 1; i++)
*p++ = '=';
*p++ = '>';
}
while (p - begin < progress_size)
*p++ = ' ';
*p++ = ']';
 
从上面的代码可以看到,提前准备好的buffer,然后把相应的进度字符填充进去,最后再输出了。
当然这次没有太细致的分析,边猜带蒙的。
 
本文永久更新地址:http://www.linuxdiyf.com/linux/24727.html