Chinaunix首页 | 论坛 | 博客
  • 博客访问: 219763
  • 博文数量: 28
  • 博客积分: 398
  • 博客等级: 一等列兵
  • 技术积分: 1109
  • 用 户 组: 普通用户
  • 注册时间: 2011-01-07 22:28
文章分类
文章存档

2017年(1)

2014年(3)

2013年(7)

2012年(4)

2011年(13)

分类: LINUX

2011-05-09 14:15:29

console监控窗口:动态显示信息(和top命令一样动态输出信息)

  1. #include <time.h>
  2. #include <string.h>

  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <unistd.h>

  6. void show_new( char *str )
  7. {
  8.     static int need_clear = 0;
  9.     char buff[1024] = {0x00};
  10.     memset( buff, 0x00, sizeof(buff) );

  11.     char back[1024] = {0x00};
  12.     int len = 0;

  13.     snprintf( buff, sizeof(buff),
  14.             "************ \033[40;31m \033[0m************\n"
  15.             "%s"
  16.             "\033[40;33m----------------------------------------\033[0m\n"
  17.             "\033[40;31m 提示: 退出 ctrl+c\033[0m\n"
  18.             "\033[40;36m Version: epoller 3.5.4 \033[0m\n"
  19.             "****************************************\n", str );

  20.     int i = 0;
  21.     len = strlen( buff );
  22.     //生成回退格 \b
  23.     while ( i < 512)
  24.     {
  25.         snprintf( back+i, sizeof(back)-i, "%s", "\b" );
  26.         i++;
  27.     }
  28.     int line = 0;
  29.     i = 0;
  30.     while ( i < len )
  31.     {
  32.         if ( buff[i] == '\n' )
  33.             line++;
  34.         i++;
  35.     }

  36.     // 清除屏幕
  37.     if ( need_clear != 0 )
  38.     {
  39.         for( i=0; i<line; i++ )
  40.         {
  41.             printf( "\033[1A" );//光标上移n行
  42.             printf( back ); // 回退清空本行
  43.         }
  44.     }
  45.     else
  46.     {
  47.         printf( "\033[2J" );//清除整个屏幕
  48.         need_clear = 1;
  49.     }
  50.     printf( "\033[0;0H" );//定位到屏幕左上角

  51.     // 打印新的内容
  52.     printf( buff);
  53.     //printf( "\033[?25l" );// 隐藏光标
  54.     fflush(stdout);

  55. }

  56. int main( int argc, char *argv[] )
  57. {
  58.     int i;
  59.     for (i = 1; i <= 10000; ++i)
  60.     {
  61.         char buff[1024] = {0x00};
  62.         memset( buff, 0x00, sizeof(buff) );

  63.         char *user = getenv("USER");
  64.         time_t t = time( NULL );
  65.         snprintf( buff, sizeof(buff), "user: %s \ntime: %lu, index=%d\n", user, t, i );
  66.         show_new( buff );
  67.         sleep(1);
  68.     }

  69.     return 0;
  70. }

阅读(2171) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~