printf 输出颜色

参考网址:

http://blog.sina.com.cn/s/blog_4c12aff701008284.html

http://www.360doc.com/content/12/0518/20/1016783_211970697.shtml


一.入门:

1.      概述:

有时候为了实现在终端输出的时候字体能够带颜色,并且可以产生简单的闪烁的功能,特写了下列的代码。

2.      代码:

实现hello world的带颜色的输出,并且每过一秒产生一个闪烁的功能.(注:具体还得判断终端类型)

(LINUX) CODE:

 

#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[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[s");             //保存光标位置
                fprintf(stderr,"\033[47;31mhello world\033[5m"); //白底红字打印helloworld,闪烁
                flag= 0;
                sleep(1);
                fprintf(stderr,"\033[u");             //恢复光标位置
                fprintf(stderr,"\033[K");             //清楚光标开始到行末
                flag= 1;
                sleep(1);
        }

        fprintf(stderr,"\033[47;31mhello world\033[5m");
        fprintf(stderr,"\033[0m");
        printf("\n");
        return 0;
}

二.格式详解:

1.  示例

CODE:

printf("\033[字背景颜色;字体颜色m字符串\033[0m" );  

printf("\033[47;31mhello world\033[5m");
47是字背景颜色, 31是字体的颜色, hello world是字符串.  后面的\033[5m是控制码.

 

 

echo -e "\033[32;49;1m [DONE] \033[39;49;0m"

输出结果    :[DONE]

 

2.      颜色控制

字背景颜色范围:40--49                   字颜色: 30--39
                40:黑                           30:黑
                41:红                           31:红
                42:绿                           32:绿
                43:黄                           33:黄
                44:蓝                           34:蓝
                45:紫                           35:紫
                46:深绿                       36:深绿
                47:白色                       37:白色

 

颜色如下:
none             ="\033[0m"
black            ="\033[0;30m"
dark_gray    = "\033[1;30m"
blue             ="\033[0;34m"
light_blue     = "\033[1;34m"
green           ="\033[0;32m"
light_green -= "\033[1;32m"
cyan            ="\033[0;36m"
light_cyan    = "\033[1;36m"
red              = "\033[0;31m"
light_red      = "\033[1;31m"
purple          ="\033[0;35m"
light_purple = "\033[1;35m"
brown          ="\033[0;33m"
yellow          ="\033[1;33m"
light_gray    = "\033[0;37m"
white           ="\033[1;37m"

3.      输出特效控制

输出特效格式控制:

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

\033[2J          清除屏幕 
\033[0q          关闭所有的键盘指示灯 
\033[1q          设置“滚动锁定”指示灯 (ScrollLock) 
\033[2q          设置“数值锁定”指示灯 (NumLock) 
\033[3q          设置“大写锁定”指示灯 (CapsLock) 
\033[15:40H     把关闭移动到第15行,40列 
\007              发蜂鸣生beep

 

三.    其它

把知识延伸下:

###########################

文本终端的颜色可以使用“ANSI非常规字符序列”来生成。举例:

  echo -e "\033[44;37;5m ME \033[0m COOL"

以上命令设置背景成为蓝色,前景白色,闪烁光标,输出字符“ME”,然后重新设置屏幕到缺省设置,输出字符 “COOL”。“e”是命令 echo 的一个可选项,它用于激活特殊字符的解析器。“\033”引导非常规字符序列。“m”意味着设置属性然后结束非常规字符序列,这个例子里真正有效的字符是 “44;37;5” 和“0”。

修改“44;37;5”可以生成不同颜色的组合,数值和编码的前后顺序没有关系。可以选择的编码

#######################

 

RedHat的字体和背景颜色的改变方法:

命令:
PS1="[\e[32;1m\u@\h \W]\\$" 
或 
export PS1="[\e[32;1m\u@\h \W]\\$" 两者的区别请查看环境变量的相关资料

解释:

\e[32;1m:这就是控制字体和背景颜色的转义字符,30~37是字体颜色、40~47是背景颜色

例子中的32;1m数字的位置是可以对调的如\e[1;32m,如果是在X环境下可以更换一下1的范围0~10,可能有的没用处:0或者不写(\e [0;32m或\e[;32m)显示浅颜色,1:显示高亮 4:加下划线.....如果改后的效果不好,但是又还原不了,那就不写m前面的数字,如\e[32;m,或者直接注销再登陆

\u \h \W:这是一些转义字符,下面详细解释:

\d :代表日期,格式为weekdaymonth date,例如:"Mon Aug 1"

\H :完整的主机名称。例如:我的机器名称为:fc4.linux,则这个名称就是fc4.linux

\h :仅取主机的第一个名字,如上例,则为fc4,.linux则被省略

\t :显示时间为24小时格式,如:HH:MM:SS

\T :显示时间为12小时格式

\A :显示时间为24小时格式:HH:MM

\u :当前用户的账号名称

\v :BASH的版本信息

\w :完整的工作目录名称。家目录会以 ~代替

\W :利用basename取得工作目录名称,所以只会列出最后一个目录

\# :下达的第几个命令

\$ :提示字符,如果是root时,提示符为:# ,普通用户则为:$

\n :新建一行

字体并不局限于一个颜色,可以有多个颜色:
PS1="[\e[32;1m\u@\e[35;1m\h \e[31;1m\W]\\$"

以上两个命令在注销后再登陆就失效了,用下面方法使其永久生效:
vi /etc/profile 
在“export PATH .....”下面添加一行:export PS1="[\e[32;1m\u@\h \W]\\$"
注销再登陆,就成功了,如果没生效,使用source /etc/profile 命令试试,或者直接重启机器。

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值