print process
最近突然想在linux 打印process,就像Windows进度条。就查了查资料,才发现原来我们的printf 有这么厉害的功能。下面我们看下代码:
#include <stdio.h>
#include <string.h>
#include <sys/wait.h>
#include <unistd.h>
int main(void) {
char str[102];
int i = 0, rate = 0;
unsigned int total = 100;
memset(str, 0, 102 * sizeof(char));
const char *ptr = "|/-\\";
while (rate <= 100) {
str[rate] = '=';
printf("\033[?251\033[40;32m[%-100s]\033[;33m[%d\%]\033[;37m[%c]\r",
str, ((rate * 100) / total), ptr[rate % 4]);
usleep(100000);
fflush(stdout); /* very important */
rate ++;
}
return 0;
}
这里要注意的是, “fflush(stdout); “, 看到flush 和 sdout,大家就算不知道实现原理,应该也是可以猜到其中的含义了。
代码功能总体是比较简单的,最好的学习方法就是,自己修改其中的一些变量值,看下跑起来的效果就会有比较深的理解了。
Maekfile
为了使我们编写的小程序可以顺利执行,需要生成一个binary。这个时候就需要我们自己写一个简单的Makfile了。Makefile用的都是简单的语法,就不详细解释了:
Proc:Proc.o
gcc Proc.o -o Proc
Proc.o:Proc.s
gcc -c Proc.s -o Proc.o
Proc.s:Proc.i
gcc -S Proc.i -o Proc.s
Proc.i:dispro.c
gcc -E dispro.c -o Proc.i
.PHONY:clean
clean:
rm -rf Proc.i Proc.s Proc.o Proc
当然也可以用更加简单的做法:gcc -o Proc dispro.c
原始文章: http://blog.youkuaiyun.com/yuehailin/article/details/53999288
如果大家对颜色比较感兴趣,可以参考https://www.cnblogs.com/lienhua34/p/5018119.html