wget进度条显示原理
每次使用wget下载内容时,会发现进度条都是当行一直更新,而在c中打印都是printf,这个似乎没有此功能;今天查了下,发现printf \n 是另起一行,\r是回到本行的开头,如果继续输入的话,则覆盖之前的内容,如下是个DEMO:
include < stdio.h> include < stdlib.h> include < unistd.h> //类似wget的进度条的实现,实际就是转移符\r的使用,\r的作用是返回至行首而不换行 int main(int argc, char *argv[]) { unsigned len = 60; char *bar = (char *)malloc(sizeof(char) * (len + 1)); for (int i = 0; i < len + 1; ++i) { bar[i] = '#'; } for (int i = 0; i < len; ++i) { printf("progress:[%s]%d%%\r", bar+len-i, i+1); fflush(stdout);//一定要fflush,否则不会会因为缓冲无法定时输出。 usleep(100000); //sleep(1); } printf("\n"); return 0; }