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;
}
结果如图
![](http://img.blog.csdn.net/20170217110940454?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZWxlbWVudDEzNw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](http://img.blog.csdn.net/20170217110945114?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZWxlbWVudDEzNw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
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;
}
结果如图
相关文章推荐
- HR--一个奖金模拟试算的程序,仅供参考
- 一个模拟简单的物品掉落的程序
- HR--一个奖金模拟试算的程序,仅供参考
- 一个模拟的COM示例程序
- cygwin是一个在windows平台上运行的linux模拟环境
- HR--一个奖金模拟试算的程序,仅供参考
- 一个分析Linux ARP日志的源代码程序
- 一个适用于windows和linux的抓包程序
- 一个将java程序运行在linux系统后台的脚本
- 一个模拟简单的物品掉落的程序
- RMI 程序能在 Windows 上运行,却在 Linux 上报错的一个原因
- 一个模拟金山毒霸等软件查毒过程的小程序
- HR--一个奖金模拟试算的程序,仅供参考
- 忙活了大半天,公布一个模拟Portlet的js小程序
- linux_把可执行程序做成一个服务
- 最近在编一个通过代理实现网页模拟点击和POST的Internet程序
- 一个简单的linux下网络程序实例-网络编程入门
- HR--一个奖金模拟试算的程序,仅供参考
- linux_把可执行程序做成一个服务
- alert7写的检测linux是否运行在VMWARE中的一个程序