console监控窗口:动态显示信息

2264阅读 0评论2011-05-09 hebingyue
分类:LINUX

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. }

上一篇:c 调试代码的简便方法
下一篇:linux c 读取cpu多核负载