http://blog.csdn.net/liumang_D/archive/2009/11/30/4907083.aspx
给printf的输出加上些特效比如颜色,可以让打印信息更鲜明,在debug的时候特别有用。
颜色:
#define NONE "\033[m"
#define RED "\033[0;32;31m"
#define LIGHT_RED "\033[1;31m"
#define GREEN "\033[0;32;32m"
#define LIGHT_GREEN "\033[1;32m"
#define BLUE "\033[0;32;34m"
#define LIGHT_BLUE "\033[1;34m"
#define DARY_GRAY "\033[1;30m"
#define CYAN "\033[0;36m"
#define LIGHT_CYAN "\033[1;36m"
#define PURPLE "\033[0;35m"
#define LIGHT_PURPLE "\033[1;35m"
#define BROWN "\033[0;33m"
#define YELLOW "\033[1;33m"
#define LIGHT_GRAY "\033[0;37m"
#define WHITE "\033[1;37m"
比如:
printf("\033[31m ####----->> \033[32m" "hello\n" "\033[m");
颜色分为背景色和字体色,30~39用来设置字体色,40~49设置背景:
背景色 字体色
40: 黑 30: 黑
41: 红 31: 红
42: 绿 32: 绿
43: 黄 33: 黄
44: 蓝 34: 蓝
45: 紫 35: 紫
46: 深绿 36: 深绿
47: 白色 37: 白色
记得在打印完之后,把颜色恢复成NONE,不然再后面的打印都会跟着变色。
另外,还可以加一些ANSI控制码。加颜色只是以下控制码中的一种:
\033[0m 关闭所有属性
\033[1m 设置高亮度
\033[4m 下划线
\033[5m 闪烁
\033[7m 反显
\033[8m 消隐
\033[30m -- \033[37m 设置前景色
\033[40m -- \033[47m 设置背景色
\033[nA 光标上移n行
\033[nB 光标下移n行
\033[nC 光标右移n行
\033[nD 光标左移n行
\033[y;xH设置光标位置
\033[2J 清屏
\033[K 清除从光标到行尾的内容
\033[s 保存光标位置
\033[u 恢复光标位置
\033[?25l 隐藏光标
\033[?25h 显示光标
一个比较实用的例子,可以延伸很多东西哦!
- //使用终端的控制码做的,在当前终端动态显示时间
- #include <stdio.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include <assert.h>
- #include <signal.h>
- #include <time.h>
- void hangup(int sig)
- {
- exit(sig);
- }
- int main(int argc, char *argv[])
- {
- FILE *fp = NULL;
- char datestr[11] = {0};
- char timestr[10] = {0};
- char dkcmd[]="\033[2h";
- char ekcmd[]="\033[2l";
- char sccmd[]="\0337";
- char rccmd[]="\0338";
- char lc1cmd[]="\033[1;70f";
- char lc2cmd[]="\033[2;71f";
- time_t tm;
- fp=fopen(ttyname(STDERR_FILENO), "w"); //这里用的是标准错误输出 //可改为"/dev/tty0"就是lcd控制台
- assert(fp); //判定fp不为NULL,如果为NULL,运行时会反应出对应的错误并终止程序的运行
- signal(SIGHUP, hangup);
- while(1){
- time(&tm);
- strftime(datestr,sizeof(datestr),"%Y-%m-%d",localtime(&tm));
- strftime(timestr,sizeof(timestr),"%H:%M:%S",localtime(&tm));
- fprintf(fp,"%s",dkcmd);
- fprintf(fp,"%s",sccmd);
- fprintf(fp,"%s",lc1cmd);
- fprintf(fp,"%s",datestr);
- fprintf(fp,"%s",lc2cmd);
- fprintf(fp,"%s",timestr);
- fprintf(fp,"%s",rccmd);
- fprintf(fp,"%s",ekcmd);
- fflush(fp);
- sleep(1);
- }
- fclose(fp);
- return 0;
- }