在Linux中实现一个进度条程序
2017-04-11 10:48
274 查看
在日常生活中,我们遇见过各种各样的进度条,那么我们今天就来编写一个进度条的代码吧!
在编写之前我们先要了解几个背景知识:
1、了解在Linux环境下的sleep函数
(1) sleep函数是让程序睡眠的
(2)函数名为sleep(),其函数原型为:
unsigned int sleep(unsigned int seconds); 参数为毫秒 (如果需要更精确可以用usleep,单位为微秒)
(3) 使用sleep函数要加头文件
了解上述知识我们再来看两份代码:
程序运行结果:先输出you are so cute!再停顿3秒
程序运行结果:先停顿3秒再输出you are so cute!
那这是为什么呢?这两份代码唯一的不同就是printf函数中一份代码有‘\n’,一份没有。
在程序中printf函数一定是先于sleep函数运行的,那为什么第二个程序得结果是先停顿再打印内容的呢?这里其实是有关缓冲区的内容的。
printf函数是自带缓冲区的,且按行刷新的。在执行printf函数的过程中,并不是将结果直接输出到屏幕中,而是将结果保存在缓冲区,按行刷新。于是第一个程序在遇到‘\n’时,缓冲区刷新将you are so cute!打印出来。
2、fflush函数
fflush: 清除读写缓冲区,需要立即把输出缓冲区的数据进行物理写入时。我们的进度条程序需要的是一个字符一个字符的输出,这样防止了输出进度条的时候出现一段一段字符输出的情况
有了以上背景知识我们就先来看看我们实现进度条的具体代码吧!
这就是我们的进度条代码了,在Linux中你首先要创建一个proc_bar的目录,在目录中先创建一个proc_bar.c的文件,在文件中写入以上代码(如图所示)
在编写之前我们先要了解几个背景知识:
1、了解在Linux环境下的sleep函数
(1) sleep函数是让程序睡眠的
(2)函数名为sleep(),其函数原型为:
unsigned int sleep(unsigned int seconds); 参数为毫秒 (如果需要更精确可以用usleep,单位为微秒)
1微秒=10^(-6)毫秒
(3) 使用sleep函数要加头文件
#include <unistd.h>
了解上述知识我们再来看两份代码:
程序运行结果:先输出you are so cute!再停顿3秒
程序运行结果:先停顿3秒再输出you are so cute!
那这是为什么呢?这两份代码唯一的不同就是printf函数中一份代码有‘\n’,一份没有。
在程序中printf函数一定是先于sleep函数运行的,那为什么第二个程序得结果是先停顿再打印内容的呢?这里其实是有关缓冲区的内容的。
printf函数是自带缓冲区的,且按行刷新的。在执行printf函数的过程中,并不是将结果直接输出到屏幕中,而是将结果保存在缓冲区,按行刷新。于是第一个程序在遇到‘\n’时,缓冲区刷新将you are so cute!打印出来。
2、fflush函数
fflush: 清除读写缓冲区,需要立即把输出缓冲区的数据进行物理写入时。我们的进度条程序需要的是一个字符一个字符的输出,这样防止了输出进度条的时候出现一段一段字符输出的情况
有了以上背景知识我们就先来看看我们实现进度条的具体代码吧!
#include<stdio.h> #include<unistd.h> int main() { int i=0; char bar[102]="#"; char* label="|/-\\";//\是特殊字符需要转义 while(i<=100) { /* * \033[3[0-7]m //设置字体颜色 * \033[4[0-7]m back //设置背景 * \033[0m clear set //将前面的设置清除 * */ printf("\033[m\033[35m[%-100s][%d%%][%c]\033[m\r",bar,i,label[i%4]); //加-是左对齐,\r是每次都回到行首,%%是对%今次那个转义 fflush(stdout); bar[i]='#'; i++; usleep(50000); } return 0; }
这就是我们的进度条代码了,在Linux中你首先要创建一个proc_bar的目录,在目录中先创建一个proc_bar.c的文件,在文件中写入以上代码(如图所示)
接着保存退出,运行此程序就可以成功实现一个带颜色的进度条,结果如下图
相关文章推荐
- 在Linux下用C语言写一个小程序实现一个进度条编写Makefile来进行运行
- 用Linux编写程序,实现一个简易的进度条
- 【Linux】Linux下实现一个简单的进度条程序
- 【1】实现一个简单的linux系统引导程序
- linux用文件锁实现保证一个程序只能启动一个进程
- Linux中实现一个简单的进度条
- Linux Socket 事件触发模型 epoll 示例 这里会写一个用C语言的TCP服务器的完全实现的简单程序
- linux0.11学习笔记-技术铺垫-简单AB任务切换程序(1)-实现一个简单的bootloader
- Linux中实现一个目录扫描程序
- 在Linux下编写一个进度条的小程序:C和shell
- linux中实现一个简单的进度条
- (转)linux用文件锁实现保证一个程序只能启动一个进程
- linux0.11学习笔记-技术铺垫-简单AB任务切换程序(1)-实现一个简单的bootloader
- Linux中实现一个简单的进度条
- linux如何实现开机加载完图形界面后自动运行自己写的一个程序
- 【Linux】彩色进度条的实现,Linux小程序
- linux用文件锁实现保证一个程序只能启动一个进程
- Linux中实现一个简单的进度条【转】
- Linux下实现一个简单进度条和shell脚本实现彩色进度条
- 用linux实现一个简单的进度条