//display.h

  1. /*************************************************************
  2. FileName : display.h
  3. FileFunc : 控制屏幕显示信息和光标的状态头文件
  4. Version  : V0.1
  5. Author   : Sunrier
  6. Date     : 2012-06-09
  7. Descp    : Linux下实现屏幕和光标的控制
  8. *************************************************************/
  9. #ifndef   _DISPLAY_H_
  10. #define   _DISPLAY_H_
  11. #ifdef __cplusplus
  12. extern "C" {
  13. #endif
  14. #include <stdio.h>
  15. #include <string.h>
  16. #include <unistd.h>
  17. #define MAX_DISPLAY_ITEM    25  //25行
  18. #define MAX_DISPLAY_WIDTH   80  //80列
  19. void Display_Message(int x,int y,char *str);
  20. void Draw_Box(int row,int col,int len,int wid);
  21. void Move_Cursor(int x,int y);
  22. void Display_Cursor( void );
  23. void Hide_Cursor( void );
  24. void Clear_All_Display( void );
  25. void Clear_Screen( void );
  26. #ifdef __cplusplus
  27. }
  28. #endif
  29. #endif

//display.c

  1. /*************************************************************
  2. FileName : display.c
  3. FileFunc : 控制屏幕显示信息和光标的状态实现文件
  4. Version  : V0.1
  5. Author   : Sunrier
  6. Date     : 2012-06-09
  7. Descp    : Linux下实现屏幕和光标的控制
  8. *************************************************************/
  9. #include "display.h"
  10. //x->行(从1开始),y->列(从1开始)
  11. //在X行Y列显示信息
  12. void Display_Message(int x,int y,char *str)
  13. {
  14. unsigned int uiLen=0;
  15. char szMessage[512];
  16. memset(szMessage,0,sizeof(szMessage));
  17. sprintf(szMessage,"\033[%d;%dH%s",x,y,str);
  18. uiLen = strlen(szMessage);
  19. write(1,szMessage,uiLen);
  20. }
  21. //画边框
  22. void Draw_Box(int row,int col,int len,int wid)
  23. {
  24. int i = 0,end = 0;
  25. char szTop[100],szBottom[100];
  26. memset(szTop,0,sizeof(szTop));
  27. memset(szBottom,0,sizeof(szBottom));
  28. strcpy(szTop,"┏");
  29. strcpy(szBottom,"┗");
  30. for (i=1;i<wid/2-1;i++)
  31. {
  32. strcat(szTop,"━");
  33. strcat(szBottom,"━");
  34. }
  35. strcat(szTop,"┓\0");
  36. strcat(szBottom,"┛\0");
  37. end=col+wid/2*2-2;
  38. Display_Message(row,col,szTop);
  39. for (i=1;i<len-1;i++)
  40. {
  41. Display_Message(row+i,col,"┃");
  42. Display_Message(row+i,end,"┃\0");
  43. }
  44. Display_Message(row+len-1,col,szBottom);
  45. }
  46. //移动光标到X行Y列
  47. void Move_Cursor(int x,int y)
  48. {
  49. unsigned int uiLen = 0;
  50. char szMessage[16];
  51. memset(szMessage,0,sizeof(szMessage));
  52. sprintf(szMessage,"\033[%d;%dH",x,y);
  53. uiLen=strlen(szMessage);
  54. write(1,szMessage,uiLen);
  55. }
  56. //显示光标
  57. void Display_Cursor( void )
  58. {
  59. printf("\033[?25h");
  60. }
  61. //隐藏光标
  62. void Hide_Cursor( void )
  63. {
  64. printf("\033[?25l");
  65. }
  66. //清除所有的显示信息(X:1到25行;Y:1到80列)
  67. void Clear_All_Display( void )
  68. {
  69. int i=0;
  70. char  szZero[MAX_DISPLAY_WIDTH];
  71. memset(szZero, ' ', sizeof(szZero));
  72. szZero[sizeof(szZero) -1] = 0;
  73. for(i = 1; i <= MAX_DISPLAY_ITEM; i++)
  74. {
  75. Display_Message(i,1,szZero);
  76. }
  77. }
  78. //清除屏幕
  79. void Clear_Screen( void )
  80. {
  81. //printf("\033[2J\033[1;1H\n");
  82. printf("\033[2J\033[1;1H");
  83. }
    1. 附:
    2. Linux 终端下颜色的输出
    3. 在命令行下也能产生五颜六色的字体和图案,只需要加上一些颜色代码
    4. 例1:
    5. printf("\033[44;31m Sunrier\033[0m")
    6. 其中44代表字背景色, 31代表字体的颜色,Sunrier是字符串,后面的\033[0m是控制码,表示关闭所有属性,m意味着设置属性然后结束
    7. 例2:
    8. echo -e "\033[41;36m 红底绿字\033[0m"
    9. 其中41代表字背景色, 36代表字体的颜色
    10. 字背景颜色范围:40----47
    11. 40:黑
    12. 41:深红
    13. 42:绿
    14. 43:黄色
    15. 44:蓝色
    16. 45:紫色
    17. 46:深绿
    18. 47:白色
    19. 字颜色:30-----------37
    20. 30:黑
    21. 31:红
    22. 32:绿
    23. 33:黄
    24. 34:蓝色
    25. 35:紫色
    26. 36:深绿
    27. 37:白色
    28. ANSI控制码的说明
    29. \33[0m 关闭所有属性,设置成默认属性
    30. \33[1m 设置高亮度
    31. \33[4m 下划线
    32. \33[5m 闪烁
    33. \33[7m 反显
    34. \33[8m 消隐
    35. \33[30m -- \33[37m 设置前景色
    36. \33[40m -- \33[47m 设置背景色
    37. \33[nA 光标上移n行
    38. \33[nB 光标下移n行
    39. \33[nC 光标右移n行
    40. \33[nD 光标左移n行
    41. \33[y;xH设置光标位置
    42. \33[2J 清屏
    43. \33[K 清除从光标到行尾的内容
    44. \33[s 保存光标位置
    45. \33[u 恢复光标位置
    46. \33[?25l 隐藏光标
    47. \33[?25h 显示光标
    48. 一般使用时习惯把\33写成\033,其中\nnn 插入nnn(注n为1到3位)(八进制)所代表的ASCII字符

Linux 下实现控制屏幕显示信息和光标的状态的更多相关文章

  1. Linux下如何查看版本信息

    Linux下如何查看版本信息, 包括位数.版本信息以及CPU内核信息.CPU具体型号等等,整个CPU信息一目了然.   1.# uname -a   (Linux查看版本当前操作系统内核信息)   L ...

  2. .net core在Linux下获取AD域信息

    .net core在Linux下获取AD域信息 .net Core 2.1.4 .net core现在System.DirectoryServices只支持Windows平台下使用. 参考: http ...

  3. Linux下如何查看版本信息(转)

    Linux下如何查看版本信息, 包括位数.版本信息以及CPU内核信息.CPU具体型号等等,整个CPU信息一目了然.   1.# uname -a   (Linux查看版本当前操作系统内核信息)   L ...

  4. Linux下查看Raid磁盘阵列信息的方法

    Linux下查看软.硬raid信息的方法. 软件raid:只能通过Linux系统本身来查看 cat /proc/mdstat 可以看到raid级别,状态等信息. 硬件raid: 最佳的办法是通过已安装 ...

  5. Linux下如何查看硬件信息?

    我们在 Linux 下进行开发时,有时也需要知道当前的硬件信息,比如:CPU几核?使用情况?内存大小及使用情况?USB设备是否被识别?等等类似此类问题.下面良许介绍一些常用的硬件查看命令. lshw ...

  6. linux 下 etc常用配置信息

    这些都是比较有实用性的系统配置,收藏下,以备不时之需!以下是etc下重要配置文件解释: 1./etc/hosts  #文件格式: IPaddress hostname aliases #文件功能: 提 ...

  7. Linux下常用的硬件信息查看命令

    1.查看CPU型号,这里为了方便查看结合管道符用grep进行了匹配,当然只需要前面的命令也可以,命令如下: cat /proc/cpuinfo | grep "model name" ...

  8. Linux下查看系统版本号信息的方法

    一.查看Linux内核版本命令(两种方法): 1.cat /proc/version 2.uname -a 二.查看Linux系统版本的命令(3种方法): 1.lsb_release -a,即可列出所 ...

  9. Linux下查看系统版本号信息的方法(转)

    一.查看Linux内核版本命令: 1.cat /proc/version [root@localhost ~]# cat /proc/versionLinux version 2.6.18-194.8 ...

随机推荐

  1. 生成订单唯一id

    $yCode = array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'); $orderSn = $yCode[intval(date('Y') ...

  2. angular post发送请求和GET发送请求,服务器端接收不到信息的问题

    参数可能因为编码原因,服务器端无法接收到传递的值, 这时需要用到补丁来解决这个问题 1,下载一个http.patch.js文件,放入YII框架中的js/ng文件架内 2angularjs 创建模型部分 ...

  3. 【C语言】严格区分大小写

    C语言严格区分大小写 一.相关基础知识 二.具体内容 C语言严格区分大小写: 如: int为关键字,INT则为用户标识符,即可定义int INT;   int INt;   int Int;  cha ...

  4. DotNet 资源

    DotNet 资源 目录 API 应用框架(Application Frameworks) 应用模板(Application Templates) 人工智能(Artificial Intelligen ...

  5. 剖析并利用Visual Studio Code在Mac上编译、调试c#程序【转】

    0x00 前言 一周多以前的微软的Build大会上,微软发布了一个让很多人眼前一亮的工具,也是本文的主角——Visual Studio Code.很多使用Windows的朋友都很高兴,认为又多了一个很 ...

  6. python 性能鸡汤

    转载自:http://www.oschina.net/question/1579_45822 1:使用内建函数input() int() isinstance() issubclass() iter( ...

  7. mysql的乱码问题

    ALTER TABLE `news`.`snapshots` MODIFY title VARCHAR() CHARACTER SET utf8; ALTER TABLE `news`.`snapsh ...

  8. BZOJ 3893 Cow Jog

    Description The cows are out exercising their hooves again! There are \(N\) cows jogging on an infin ...

  9. Pair of Numbers

    Codeforces Round #209 (Div. 2) D:http://codeforces.com/contest/359/problem/D 题意:给以一个n个数的序列,然后问你最大的区间 ...

  10. 中文简体windows CMD显示中文乱码解决方案

    因为重装系统,以前是英文的,现在的镜像文件是中文简体windows 10.所以只能将就使用. 下载了JDK,CMD 写了命令java,结果一堆乱码(问号???).发现System的locale默认设置 ...