您的位置:首页 > 运维架构 > Linux

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

2017-02-17 11:01 155 查看
背景知识

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;
}

结果如图





    
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: