海王  

 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   显示光标

一个比较实用的例子,可以延伸很多东西哦!

 

  1. //使用终端的控制码做的,在当前终端动态显示时间  
  2. #include <stdio.h>  
  3. #include <stdlib.h>  
  4. #include <unistd.h>  
  5. #include <assert.h>  
  6. #include <signal.h>  
  7. #include <time.h>  
  8.   
  9. void hangup(int sig)  
  10. {  
  11.     exit(sig);  
  12. }  
  13.   
  14. int main(int argc, char *argv[])  
  15. {  
  16.     FILE *fp = NULL;  
  17.     char datestr[11] = {0};  
  18.     char timestr[10] = {0};  
  19.     char dkcmd[]="\033[2h";  
  20.     char ekcmd[]="\033[2l";  
  21.     char sccmd[]="\0337";  
  22.     char rccmd[]="\0338";  
  23.     char lc1cmd[]="\033[1;70f";  
  24.     char lc2cmd[]="\033[2;71f";  
  25.     time_t tm;  
  26.   
  27.     fp=fopen(ttyname(STDERR_FILENO), "w"); //这里用的是标准错误输出  //可改为"/dev/tty0"就是lcd控制台
  28.     assert(fp); //判定fp不为NULL,如果为NULL,运行时会反应出对应的错误并终止程序的运行  
  29.     signal(SIGHUP, hangup);  
  30.       
  31.     while(1){  
  32.         time(&tm);  
  33.         strftime(datestr,sizeof(datestr),"%Y-%m-%d",localtime(&tm));  
  34.         strftime(timestr,sizeof(timestr),"%H:%M:%S",localtime(&tm));  
  35.         fprintf(fp,"%s",dkcmd);  
  36.         fprintf(fp,"%s",sccmd);  
  37.         fprintf(fp,"%s",lc1cmd);  
  38.         fprintf(fp,"%s",datestr);  
  39.         fprintf(fp,"%s",lc2cmd);  
  40.         fprintf(fp,"%s",timestr);  
  41.         fprintf(fp,"%s",rccmd);  
  42.         fprintf(fp,"%s",ekcmd);  
  43.         fflush(fp);  
  44.         sleep(1);  
  45.     }  
  46.   
  47.     fclose(fp);  
  48.     return 0;  
  49. }  

 

posted on 2010-01-23 01:34  海王  阅读(1520)  评论(0编辑  收藏  举报