?? tload.c
字號:
/* * tload.c - terminal version of xload * * Options: * -s initial scaling exponent (default = 6) * -d delay * * Copyright (c) 1992 Branko Lankester * /proc changes by David Engel (david@ods.com) * Made a little more efficient by Michael K. Johnson (johnsonm@sunsite.unc.edu) */#include "proc/version.h"#include "proc/sysinfo.h"#include <stdio.h>#include <stdlib.h>#include <setjmp.h>#include <signal.h>#include <string.h>#include <unistd.h>#include <termios.h>#include <fcntl.h>#include <sys/ioctl.h>static char *screen;static int nrows = 25;static int ncols = 80;static int scr_size;static int fd=1;static int dly=5;static jmp_buf jb;extern int optind;extern char *optarg;static void alrm(int signo){ (void)signo; signal(SIGALRM, alrm); alarm(dly);}static void setsize(int i){ struct winsize win; signal(SIGWINCH, setsize); if (ioctl(fd, TIOCGWINSZ, &win) != -1) { if (win.ws_col > 0) ncols = win.ws_col; if (win.ws_row > 0) nrows = win.ws_row; } scr_size = nrows * ncols; if (screen == NULL) screen = (char *) malloc(scr_size); else screen = (char *) realloc(screen, scr_size); if (screen == NULL) { perror(""); exit(1); } memset(screen, ' ', scr_size-1); *(screen + scr_size - 2) = '\0'; if (i) longjmp(jb, 0);}int main(int argc, char **argv){ int lines, row, col=0; int i, opt; double av[3]; static double max_scale, scale_fact; char *scale_arg = NULL; while ((opt = getopt(argc, argv, "s:d:V")) != -1) switch (opt) { case 's': scale_arg = optarg; break; case 'd': dly = atoi(optarg); break; case 'V': display_version(); exit(0); break; default: printf("usage: tload [-V] [-d delay] [-s scale] [tty]\n"); exit(1); } if (argc > optind) { if ((fd = open(argv[optind], 1)) == -1) { perror(argv[optind]); exit(1); } } setsize(0); if (scale_arg) max_scale = atof(scale_arg); else max_scale = nrows; scale_fact = max_scale; setjmp(jb); col = 0; alrm(0); while (1) { if (scale_fact < max_scale) scale_fact *= 2.0; /* help it drift back up. */ loadavg(&av[0], &av[1], &av[2]); repeat: lines = av[0] * scale_fact; row = nrows-1; while (--lines >= 0) { *(screen + row * ncols + col) = '*'; if (--row < 0) { scale_fact /= 2.0; goto repeat; } } while (row >= 0) *(screen + row-- * ncols + col) = ' '; for (i = 1; ; ++i) { char *p; row = nrows - (i * scale_fact); if (row < 0) break; if (*(p = screen + row * ncols + col) == ' ') *p = '-'; else *p = '='; } if (++col == ncols) { --col; memmove(screen, screen + 1, scr_size-1); for(row = nrows-2; row >= 0; --row) *(screen + row * ncols + col) = ' '; } i = sprintf(screen, " %.2f, %.2f, %.2f", av[0], av[1], av[2]); if (i>0) screen[i] = ' '; write(fd, "\033[H", 3); write(fd, screen, scr_size - 1); pause(); }}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -