转自: http://blog.csdn.net/htttw/article/details/7483274
终端格式控制
今天我们介绍如何改变终端的输出格式,包括前景色,背景色等。
先给出如下语句:
- printf("\033[31mI am red!\n");
其中的\033[31m表示将终端的前景色改成红色,因此会看到如下结果:
有如下的一些格式:
\033[0m 关闭所有属性
\033[1m 设置高亮度
\033[4m 下划线
\033[5m 闪烁
\033[7m 反显
\033[8m 消隐
\033[30m 至 \33[37m 设置前景色
\033[40m 至 \33[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 显示光标
其中前景色有如下一些:
30: 黑
31: 红
32: 绿
33: 黄
34: 蓝
35: 紫
36: 青
37: 白
其中背景色有如下一些:
40: 黑
41: 红
42: 绿
43: 黄
44: 蓝
45: 紫
46: 青
47: 白
另外,同类的多种设置项可以组合在一起,中间用分号(;)隔开。如下:
- printf("\033[10;1H\033[1;4;32mHello,world\033[0m");
下面是一个比较综合的例子:
Makefile:
- all: color.c
- gcc -Wall -o color color.c
- clean:
- rm -rf *.o color
color.c:
- #include <unistd.h>
- #include <stdio.h>
- int main()
- {
- /* 设置高亮度 */
- printf("\033[1m Hightlight!\n");
- /* 下划线 */
- printf("\033[4m Underline!\n");
- /* 关闭所有属性 */
- printf("\033[0m");
- /* 反显 */
- printf("\033[7m 反显!\n");
- /* 关闭所有属性 */
- printf("\033[0m");
- /* 设置前景色 \033[30m 至 \33[37m */
- printf("\033[30m fore color");
- printf("\033[31m fore color");
- printf("\033[32m fore color");
- printf("\033[33m fore color");
- printf("\033[34m fore color");
- printf("\033[35m fore color");
- printf("\033[36m fore color");
- printf("\033[37m fore color\n");
- /* 关闭所有属性 */
- printf("\033[0m");
- /* 设置背景色 \033[40m 至 \33[47m */
- printf("\033[40m back color");
- printf("\033[41m back color");
- printf("\033[42m back color");
- printf("\033[43m back color");
- printf("\033[44m back color");
- printf("\033[45m back color");
- printf("\033[46m back color");
- printf("\033[47m back color\n");
- /* 关闭所有属性 */
- printf("\033[0m");
- /* 光标右移20行 */
- printf("\033[20C");
- /* 光标下移2行 */
- printf("\033[2B i am here!\n");
- /* 也可以组合使用 */
- printf ("\033[31mIt's ok!\033[0m");
- printf("\033[10;20H\033[1;4;32mIt's also ok!\033[0m");
- /* 隐藏光标 */
- printf("\033[?25l where is the cursor???\n");
- sleep(5);
- /* 显示光标 */
- printf("\033[?25h i am here!\n");
- sleep(5);
- /* 关闭所有属性 */
- printf("\033[0m");
- return 0;
- }
程序的最后一部分先隐藏光标5秒,然后再显示光标,最后退出。
结果:
另外,除了编程控制终端外,我们还可以直接用shell来控制,如下:
echo命令-e选项的作用是激活终端对反斜线转义符(即\)的解释
完成