亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? m_linux.c

?? linux 系統(tǒng)下通過top機制
?? C
字號:
/* * top - a top users display for Unix * * SYNOPSIS:  Linux 1.2.x, 1.3.x, using the /proc filesystem * * DESCRIPTION: * This is the machine-dependent module for Linux 1.2.x or 1.3.x. * * LIBS: * * CFLAGS: -DHAVE_GETOPT * * AUTHOR: Richard Henderson <rth@tamu.edu> */#include "top.h"#include "machine.h"#include "utils.h"#include <sys/types.h>#include <stdio.h>#include <fcntl.h>#include <unistd.h>#include <stdlib.h>#include <errno.h>#include <dirent.h>#include <string.h>#include <math.h>#include <ctype.h>#include <sys/time.h>#include <sys/stat.h>#include <sys/vfs.h>#include <sys/param.h>		/* for HZ */#include <asm/page.h>		/* for PAGE_SHIFT */#if 0#include <linux/proc_fs.h>	/* for PROC_SUPER_MAGIC */#else#define PROC_SUPER_MAGIC 0x9fa0#endif//#define HASH_SIZE 1024 #define NR_TASKS 1024;#define PROCFS "/proc"extern char *myname;extern uid_t proc_owner(pid_t pid);/*=STATE IDENT STRINGS==================================================*/#define NPROCSTATES 7static char *state_abbrev[NPROCSTATES+1] ={    "", "run", "sleep", "disk", "zomb", "stop", "swap",    NULL};static char *procstatenames[NPROCSTATES+1] ={    "", " running, ", " sleeping, ", " uninterruptable, ",    " zombie, ", " stopped, ", " swapping, ",    NULL};#define NCPUSTATES 4static char *cpustatenames[NCPUSTATES+1] ={    "user", "nice", "system", "idle",    NULL};#define NMEMSTATS 6static char *memorynames[NMEMSTATS+1] ={    "K used, ", "K free, ", "K shd, ", "K buf  Swap: ",    "K used, ", "K free",    NULL};static char fmt_header[] ="  PID X        PRI NICE  SIZE   RES STATE   TIME   WCPU    CPU COMMAND";/*=SYSTEM STATE INFO====================================================*//* these are for calculating cpu state percentages */static long cp_time[NCPUSTATES];static long cp_old[NCPUSTATES];static long cp_diff[NCPUSTATES];/* these are for keeping track of processes */#define HASH_SIZE	(NR_TASKS * 3 / 2)static struct top_proc **nextactive;/* these are for passing data back to the machine independant portion */static int cpu_states[NCPUSTATES];static int memory_stats[NMEMSTATS];/* usefull macros */#define bytetok(x)	(((x) + 512) >> 10)#define pagetok(x)	((x) << (PAGE_SHIFT - 10))#define HASH(x)		(((x) * 1686629713U) % HASH_SIZE)/*======================================================================*/static inline char *skip_ws(const char *p){    while (isspace(*p)) p++;    return (char *)p;}    static inline char *skip_token(const char *p){    while (isspace(*p)) p++;    while (*p && !isspace(*p)) p++;    return (char *)p;} intmachine_init(statics)    struct statics *statics;{    /* make sure the proc filesystem is mounted */    {	struct statfs sb;	if (statfs(PROCFS, &sb) < 0 || sb.f_type != PROC_SUPER_MAGIC)	{	    fprintf(stderr, " proc filesystem not mounted on " PROCFS "\n");	    return -1;	}    }    /* chdir to the proc filesystem to make things easier */    chdir(PROCFS);    /* fill in the statics information */    statics->procstate_names = procstatenames;    statics->cpustate_names = cpustatenames;    statics->memory_names = memorynames;    /* all done! */    return 0;}voidget_system_info(info)    struct system_info *info;{    char buffer[4096+1];    int fd, len;    char *p;    int i;    /* get load averages */    {	fd = open("loadavg", O_RDONLY);	len = read(fd, buffer, sizeof(buffer)-1);	close(fd);	buffer[len] = '\0';	info->load_avg[0] = strtod(buffer, &p);	info->load_avg[1] = strtod(p, &p);	info->load_avg[2] = strtod(p, &p);	p = skip_token(p);			/* skip running/tasks */	p = skip_ws(p);	if (*p)	    info->last_pid = atoi(p);	else	    info->last_pid = -1;    }    /* get the cpu time info */    {	fd = open("stat", O_RDONLY);	len = read(fd, buffer, sizeof(buffer)-1);	close(fd);	buffer[len] = '\0';	p = skip_token(buffer);			/* "cpu" */	cp_time[0] = strtoul(p, &p, 0);		cp_time[1] = strtoul(p, &p, 0);	cp_time[2] = strtoul(p, &p, 0);	cp_time[3] = strtoul(p, &p, 0);	/* convert cp_time counts to percentages */	percentages(4, cpu_states, cp_time, cp_old, cp_diff);    }	    /* get system wide memory usage */    {	char *p;	fd = open("meminfo", O_RDONLY);	len = read(fd, buffer, sizeof(buffer)-1);	close(fd);	buffer[len] = '\0';	/* be prepared for extra columns to appear be seeking	   to ends of lines */		p = buffer;	p = skip_token(p);	memory_stats[0] = strtoul(p, &p, 10); /* total memory */		p = strchr(p, '\n');	p = skip_token(p);	memory_stats[1] = strtoul(p, &p, 10); /* free memory */			p = strchr(p, '\n');	p = skip_token(p);	memory_stats[2] = strtoul(p, &p, 10); /* buffer memory */		p = strchr(p, '\n');	p = skip_token(p);	memory_stats[3] = strtoul(p, &p, 10); /* cached memory */		for(i = 0; i< 8 ;i++) {		p++;		p = strchr(p, '\n');	}		p = skip_token(p);	memory_stats[4] = strtoul(p, &p, 10); /* total swap */		p = strchr(p, '\n');	p = skip_token(p);	memory_stats[5] = strtoul(p, &p, 10); /* free swap */	    }    /* set arrays and strings */    info->cpustates = cpu_states;    info->memory = memory_stats;}void read_one_proc_stat(pid_t pid, struct top_proc *proc){    char buffer[4096], *p;    /* grab the proc stat info in one go */    {	int fd, len;	sprintf(buffer, "%d/stat", pid);	fd = open(buffer, O_RDONLY);	len = read(fd, buffer, sizeof(buffer)-1);	close(fd);	buffer[len] = '\0';    }    proc->uid = proc_owner(pid);    /* parse out the status */        p = buffer;    p = strchr(p, '(')+1;			/* skip pid */    {	char *q = strrchr(p, ')');	int len = q-p;	if (len >= sizeof(proc->name))	    len = sizeof(proc->name)-1;	memcpy(proc->name, p, len);	proc->name[len] = 0;	p = q+1;    }    p = skip_ws(p);    switch (*p++)    {      case 'R': proc->state = 1; break;      case 'S': proc->state = 2; break;      case 'D': proc->state = 3; break;      case 'Z': proc->state = 4; break;      case 'T': proc->state = 5; break;      case 'W': proc->state = 6; break;    }        p = skip_token(p);				/* skip ppid */    p = skip_token(p);				/* skip pgrp */    p = skip_token(p);				/* skip session */    p = skip_token(p);				/* skip tty */    p = skip_token(p);				/* skip tty pgrp */    p = skip_token(p);				/* skip flags */    p = skip_token(p);				/* skip min flt */    p = skip_token(p);				/* skip cmin flt */    p = skip_token(p);				/* skip maj flt */    p = skip_token(p);				/* skip cmaj flt */        proc->time = strtoul(p, &p, 10);		/* utime */    proc->time += strtoul(p, &p, 10);		/* stime */    p = skip_token(p);				/* skip cutime */    p = skip_token(p);				/* skip cstime */    proc->pri = strtol(p, &p, 10);		/* priority */    proc->nice = strtol(p, &p, 10);		/* nice */    p = skip_token(p);				/* skip timeout */    p = skip_token(p);				/* skip it_real_val */    p = skip_token(p);				/* skip start_time */    proc->size = bytetok(strtoul(p, &p, 10));	/* vsize */    proc->rss = pagetok(strtoul(p, &p, 10));	/* rss */#if 0    /* for the record, here are the rest of the fields */    p = skip_token(p);				/* skip rlim */    p = skip_token(p);				/* skip start_code */    p = skip_token(p);				/* skip end_code */    p = skip_token(p);				/* skip start_stack */    p = skip_token(p);				/* skip sp */    p = skip_token(p);				/* skip pc */    p = skip_token(p);				/* skip signal */    p = skip_token(p);				/* skip sigblocked */    p = skip_token(p);				/* skip sigignore */    p = skip_token(p);				/* skip sigcatch */    p = skip_token(p);				/* skip wchan */#endif}char *format_header(uname_field)    char *uname_field;{    int uname_len = strlen(uname_field);    if (uname_len > 8)	uname_len = 8;    memcpy(strchr(fmt_header, 'X'), uname_field, uname_len);    return fmt_header;}char *format_next_process(struct top_proc *p){    static char fmt[128];	/* static area where result is built */       sprintf(fmt,	    "%5d %-8.8s %3d %4d %5s %5s %-5s %6s %5.2f%% %5.2f%% %.14s",	    p->pid,	    (p->uid),	    p->pri,	    p->nice,	    format_k(p->size),	    format_k(p->rss),	    state_abbrev[p->state],	    format_time(p->time / HZ),	    p->wcpu * 100.0,	    p->pcpu * 100.0,	    p->name);    /* return the result */    return (fmt);}/* *  proc_compare - comparison function for "qsort" *	Compares the resource consumption of two processes using five *  	distinct keys.  The keys (in descending order of importance) are: *  	percent cpu, cpu ticks, state, resident set size, total virtual *  	memory usage.  The process states are ordered as follows (from least *  	to most important):  WAIT, zombie, sleep, stop, start, run.  The *  	array declaration below maps a process state index into a number *  	that reflects this ordering. */intproc_compare (pp1, pp2)    struct top_proc **pp1, **pp2;{    static unsigned char sort_state[] =    {	0,	/* empty */	6, 	/* run */	3,	/* sleep */	5,	/* disk wait */	1,	/* zombie */	2,	/* stop */	4	/* swap */    };    struct top_proc *p1, *p2;    int result;    double dresult;    /* remove one level of indirection */    p1 = *pp1;    p2 = *pp2;    /* compare percent cpu (pctcpu) */    dresult = p2->pcpu - p1->pcpu;    if (dresult != 0.0)	return dresult > 0.0 ? 1 : -1;    /* use cputicks to break the tie */    if ((result = p2->time - p1->time) == 0)    {	/* use process state to break the tie */	if ((result = (sort_state[p2->state] - sort_state[p1->state])) == 0)	{	    /* use priority to break the tie */	    if ((result = p2->pri - p1->pri) == 0)	    {		/* use resident set size (rssize) to break the tie */		if ((result = p2->rss - p1->rss) == 0)		{		    /* use total memory to break the tie */		    result = (p2->size - p1->size);		}	    }	}    }    return result == 0 ? 0 : result < 0 ? -1 : 1;}/* * proc_owner(pid) - returns the uid that owns process "pid", or -1 if *              the process does not exist. *              It is EXTREMLY IMPORTANT that this function work correctly. *              If top runs setuid root (as in SVR4), then this function *              is the only thing that stands in the way of a serious *              security problem.  It validates requests for the "kill" *              and "renice" commands. */uid_tproc_owner(pid)    pid_t pid;{    struct stat sb;    char buffer[32];    sprintf(buffer, "%d", pid);    if (stat(buffer, &sb) < 0)	return -1;    else	return sb.st_uid;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩和欧美一区二区三区| 免费观看一级欧美片| 一区二区三区av电影| 亚洲动漫第一页| 国产自产2019最新不卡| 91色综合久久久久婷婷| 91精品国产综合久久久蜜臀粉嫩| 欧美成人三级在线| 一区二区三区精品视频在线| 久久激情五月婷婷| 一本大道久久精品懂色aⅴ| 日韩欧美久久久| 亚洲男女一区二区三区| 天天综合天天综合色| 国产乱人伦偷精品视频不卡| 9i看片成人免费高清| 在线观看日韩国产| 日本一区二区视频在线观看| 日韩中文欧美在线| 91免费视频网| 国产欧美日韩麻豆91| 蜜桃视频在线观看一区| 在线免费观看日本欧美| 日本一区二区三区电影| 久久国产精品99久久久久久老狼| 日本丶国产丶欧美色综合| 久久久一区二区三区| 日本va欧美va瓶| 欧美视频三区在线播放| 18成人在线观看| 国产成人亚洲综合色影视| 日韩写真欧美这视频| 一区二区三区在线播| 国产精一区二区三区| 欧美变态凌虐bdsm| 日韩av网站在线观看| 欧美日韩一区小说| 一区二区三区不卡在线观看| 91啪九色porn原创视频在线观看| 亚洲国产成人午夜在线一区 | 亚洲欧美另类久久久精品| 国产美女精品在线| 精品国产制服丝袜高跟| 免费成人美女在线观看.| 欧美剧在线免费观看网站| 亚洲综合视频在线观看| 欧美在线不卡一区| 亚洲综合一区在线| 欧美日韩国产综合草草| 亚洲观看高清完整版在线观看| 日本韩国欧美一区| 亚洲综合999| 99久久精品免费| 亚洲欧美日韩国产中文在线| 在线视频国内自拍亚洲视频| 一区二区三区视频在线看| 欧美在线免费观看亚洲| 午夜亚洲福利老司机| 777精品伊人久久久久大香线蕉| 亚洲第一福利一区| 日韩欧美中文字幕一区| 免费在线观看不卡| 久久嫩草精品久久久精品| 国产精品一区在线观看乱码| 中文欧美字幕免费| 成人高清视频在线| 亚洲精品中文在线影院| 欧美精品v国产精品v日韩精品 | 亚洲人成网站在线| 在线视频综合导航| 美国毛片一区二区| 欧美激情中文字幕| 91久久精品一区二区| 午夜视频久久久久久| 久久综合色婷婷| 国产精品自在欧美一区| 亚洲国产高清在线| 成人av在线一区二区三区| 亚洲综合激情另类小说区| 日韩欧美亚洲另类制服综合在线| 国产999精品久久| 一区二区三区在线不卡| 欧美大片日本大片免费观看| 成人a免费在线看| 亚洲国产一区二区a毛片| 精品日韩欧美一区二区| 色综合久久88色综合天天免费| 日韩精品一级二级| 国产精品视频一区二区三区不卡| 99久久精品免费| 九色porny丨国产精品| 亚洲视频在线一区观看| 欧美v日韩v国产v| 色视频成人在线观看免| 国内不卡的二区三区中文字幕| 亚洲老妇xxxxxx| 久久久久亚洲蜜桃| 欧美日韩精品欧美日韩精品一综合| 国产激情视频一区二区三区欧美 | 欧美电视剧免费观看| 99国产精品国产精品久久| 男女男精品视频网| 亚洲影视资源网| 一区二区中文视频| 26uuu亚洲综合色| 欧美日韩电影在线| 99国产精品一区| 国产一区高清在线| 免费看日韩精品| 午夜电影一区二区三区| 中文字幕亚洲综合久久菠萝蜜| 欧美一级国产精品| 欧美午夜一区二区三区| 成人av网站免费| 久久国产精品99久久人人澡| 一区二区三区四区不卡在线| 一区免费观看视频| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 国产成人av电影在线观看| 五月天激情综合网| 夜夜嗨av一区二区三区网页| 成人欧美一区二区三区黑人麻豆| 久久影院午夜片一区| 精品日韩成人av| 亚洲精品一区二区三区福利| 欧美一区二区国产| 欧美精品xxxxbbbb| 在线视频你懂得一区| 欧洲人成人精品| 欧美亚洲综合另类| 欧美日本一区二区| 欧美日韩免费观看一区二区三区 | 99精品欧美一区二区三区小说 | 精品日韩99亚洲| 欧美成人vr18sexvr| 日韩区在线观看| 日韩欧美在线网站| 日韩精品一区二区三区swag| 精品伦理精品一区| 久久综合一区二区| 国产欧美一区二区在线| 26uuu亚洲综合色| 中文字幕第一页久久| 18欧美乱大交hd1984| 亚洲一区二区三区爽爽爽爽爽| 亚洲福利视频一区二区| 日本欧美在线看| 视频在线观看国产精品| 久久精品国产亚洲高清剧情介绍 | 在线免费观看日本欧美| 欧美日韩午夜在线| 精品久久一二三区| 日韩毛片视频在线看| 丝袜a∨在线一区二区三区不卡| 美女在线一区二区| 一本色道综合亚洲| 91麻豆精品国产自产在线观看一区| 久久精品亚洲一区二区三区浴池| 一区在线中文字幕| 久久99九九99精品| 91福利国产精品| 国产亚洲1区2区3区| 亚洲一级在线观看| 国产99一区视频免费| 欧美日韩国产另类一区| 国产精品水嫩水嫩| 久久66热re国产| 欧美网站大全在线观看| 国产精品污www在线观看| 日本美女一区二区三区视频| 99视频超级精品| 久久综合狠狠综合久久激情| 欧美一区二区观看视频| 国产校园另类小说区| 五月天激情综合网| 色婷婷久久综合| 国产日韩欧美电影| 麻豆免费看一区二区三区| 欧洲精品中文字幕| 国产精品毛片高清在线完整版 | 国产九色精品成人porny| 欧美精品电影在线播放| 亚洲蜜桃精久久久久久久| 国产91精品一区二区麻豆网站 | 亚洲一级二级三级在线免费观看| 成人午夜免费电影| 精品国产凹凸成av人网站| 日韩专区一卡二卡| 在线不卡免费欧美| 亚洲电影你懂得| 91国偷自产一区二区开放时间 | 精品日产卡一卡二卡麻豆| 午夜视频在线观看一区| 91在线视频免费91| 欧美激情一区二区在线| 激情综合网av| 日韩精品中文字幕一区| 日韩国产成人精品| 91麻豆精品久久久久蜜臀| 天堂影院一区二区|