考虑以下应用场景或需求:用户希望看到的显示在终端的打印信息能够按颜色输出。比如,错误信息用红色输出,正确信息用绿色输出,普通信息则是常规输出。
如何做到呢?printf函数可以帮助做到这一点。
使用格式为: printf("\033[字背景颜色;字体颜色m字符串\033[0m" );
例如:printf("\033[47;31mhello world\033[5m");
47是字背景颜色, 31是字体的颜色, hello world是字符串.
颜色代码:
字背景颜色范围: 40--49
ANSI控制码:
这样, 在某些时候就可以实现动态的输出.
附:
实现hello world的带颜色的输出,并且每过一秒产生一个闪烁的功能.
(注:具体还得判断终端类型)
#include<stdio.h>
#include<unistd.h>
#include<signal.h>
#include<stdlib.h>
int flag = 0;
void sig_int(int signum)
{
if (flag == 1)
fprintf(stderr, "\033[47;31mhello world\033[5m");
fprintf(stderr,"\033[;\033[0m");
fprintf(stderr,"\033[;\033[0m");
printf("\n");
exit(0);
}
int main()
{
int i = 0;
struct sigaction sig_act;
sig_act.sa_handler = sig_int;
sigemptyset(&sig_act.sa_mask);
sig_act.sa_flags = 0;
if (sigaction(SIGINT, &sig_act, NULL) < 0)
{
fprintf(stderr, "signal error\n");
exit(1);
}
while (i++ < 10)
{
fprintf(stderr, "\033[;\033[s");
fprintf(stderr, "\033[47;31mhello world\033[5m");
flag = 0;
sleep(1);
fprintf(stderr, "\033[;\033[u");
fprintf(stderr, "\033[;\033[K");
flag = 1;
sleep(1);
}
fprintf(stderr, "\033[47;31mhello world\033[5m");
fprintf(stderr,"\033[;\033[0m");
printf("\n");
return 0;
}
该程序实现输出十次hello world然后退出. 使用一个信号是为了还原默认的终端输出的颜色.