linux下的一个小程序--模拟进度条

来源:互联网 发布:申请淘宝商家披露信息 编辑:程序博客网 时间:2024/05/16 01:12

背景知识

1.回车换行

在生活中,我们不是很清楚回车换行的区别,只以为是从一行换到下一行,认为这是一个概念。其实在计算机中,回车和换行是两个东西

回车是指跳回这一行的行首   \r  

换行是指跳到下一行,列位置不变 \n

 所以计算机在换行的时候是先换行再回车的

2.sleep 和usleep

函数名: sleep
  头文件: #include <unistd.h>  // 在gcc编译器中,使用的头文件因gcc版本的不同而不同
  功  能: 执行挂起指定的秒数

函数名: usleep
  头文件: #include <unistd.h>
  功  能: usleep功能把进程挂起一段时间, 单位是微秒(百万分之一秒)

时钟换算:
 微秒,时间单位,符号us(英语:microsecond ).
 1微秒等于百万分之一秒(10的负6 次方秒)
 0.000 001 微秒 = 1皮秒
 0.001 微秒 = 1纳秒
 1,000 微秒 = 1毫秒
 1,000,000 微秒 = 1秒
 1s = 1000ms
 1ms = 1000μs
 1μs = 1000ns
 1ns = 1000ps
 1秒(s) = 1000 毫秒(ms) = 1,000,000 微秒(μs) = 1,000,000,000 纳秒(ns) = 1,000,000,000,000 皮秒(ps)

3.fflush

计算机在执行程序时会打开三个流 stdin、stdout、stderror 

fflush用于清空缓冲流,虽然一般感觉不到,但是默认printf是缓冲输出的。

fflush(stdout),使stdout清空,就会立刻输出所有在缓冲区的内容。



在printf()后使用fflush(stdout)的作用是立刻将要输出的内容输出。 
当使用printf()函数后,系统将内容存入输出缓冲区,等到时间片轮转到系统的输出程序时,将其输出。 
使用fflush(out)后,立刻清空输出缓冲区,并把缓冲区内容输出。 
例如: 
for (ctr = 1; ctr <= wait; ctr++) 

printf("."); /* print a dot */ 
fflush(stdout); /* force dot to print on buffered machines */ 
sleep(1); /* pause 1 second */ 


用fflush(stdout)能使机器每输出一个.暂停一秒钟,而不会出现乱序(例如:PP。。。PP。PPP。。。等)现象。


程序分析

#include<stdio.h>#include<unistd.h>int main(){int i = 0;char bar[102]; //0到100 有101个数,102位置存放'\0'const char *lable = "-\\|/";//每次刷新显示不一样的字符,表示进度条在加载bar[0] = '\0';while (i <= 100){printf("[%-101s][%d%%][%c]\r",bar,i,lable[i%4]);//%-101s表示字符串靠左输出空出101格,\r回车符跳到行首fflush(stdout); //刷新标准输出流bar[i++] = '=';// = 表示进度条已经走过的部分bar[i] = '\0';usleep(50000);}printf("\n");return 0;}


结果如图



    

0 0
原创粉丝点击