您的位置:首页 > 编程语言

fprintf 控制台代码,可以控制光标等,控制台显示时间源码

2010-01-23 01:34 393 查看
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐