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

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

?? slabtop.c

?? linux下獲取一些環境信息的代碼
?? C
字號:
/*  * slabtop.c - utility to display kernel slab information. * * Chris Rivera <cmrivera@ufl.edu> * Robert Love <rml@tech9.net> * * This program is licensed under the GNU Library General Public License, v2 * * Copyright (C) 2003 Chris Rivera */#include <stdlib.h>#include <stdio.h>#include <string.h>#include <errno.h>#include <signal.h>#include <ncurses.h>#include <termios.h>#include <getopt.h>#include <ctype.h>#include <sys/ioctl.h>#include <sys/select.h>#include <sys/time.h>#include <sys/types.h>#include <unistd.h>#include "proc/slab.h"#include "proc/version.h"#define DEF_SORT_FUNC		sort_nr_objs#define SLAB_STAT_ZERO		{ nr_objs: 0 }static unsigned short cols, rows;static struct termios saved_tty;static long delay = 3;static int (*sort_func)(const struct slab_info *, const struct slab_info *);static struct slab_info *merge_objs(struct slab_info *a, struct slab_info *b){	struct slab_info sorted_list;	struct slab_info *curr = &sorted_list;	while ((a != NULL) && (b != NULL)) {		if (sort_func(a, b)) {			curr->next = a;			curr = a;			a = a->next;		} else {			curr->next = b;			curr = b;			b = b->next;		}	}	curr->next = (a == NULL) ? b : a;	return sorted_list.next;}/*  * slabsort - merge sort the slab_info linked list based on sort_func */static struct slab_info *slabsort(struct slab_info *list){	struct slab_info *a, *b;	if ((list == NULL) || (list->next == NULL))		return list;	a = list;	b = list->next;	while ((b != NULL) && (b->next != NULL)) {		list = list->next;		b = b->next->next;	}		b = list->next;	list->next = NULL;	return merge_objs(slabsort(a), slabsort(b));}/* * Sort Routines.  Each of these should be associated with a command-line * search option.  The functions should fit the prototype: * *	int sort_foo(const struct slab_info *a, const struct slab_info *b) * * They return one if the first parameter is larger than the second * Otherwise, they return zero. */static int sort_name(const struct slab_info *a, const struct slab_info *b){	return (strcmp(a->name, b->name) < 0) ? 1 : 0;}static int sort_nr_objs(const struct slab_info *a, const struct slab_info *b){	return (a->nr_objs > b->nr_objs);}static int sort_nr_active_objs(const struct slab_info *a,				const struct slab_info *b){	return (a->nr_active_objs > b->nr_active_objs);}static int sort_obj_size(const struct slab_info *a, const struct slab_info *b){	return (a->obj_size > b->obj_size);}static int sort_objs_per_slab(const struct slab_info *a,				const struct slab_info *b){	return (a->objs_per_slab > b->objs_per_slab);}static int sort_pages_per_slab(const struct slab_info *a,		const struct slab_info *b){	return (a->pages_per_slab > b->pages_per_slab);}static int sort_nr_slabs(const struct slab_info *a, const struct slab_info *b){	return (a->nr_slabs > b->nr_slabs);}static int sort_nr_active_slabs(const struct slab_info *a,			const struct slab_info *b){	return (a->nr_active_slabs > b->nr_active_slabs);}static int sort_use(const struct slab_info *a, const struct slab_info *b){	return (a->use > b->use);}static int sort_cache_size(const struct slab_info *a, const struct slab_info *b){	return (a->cache_size > b->cache_size);}/* * term_size - set the globals 'cols' and 'rows' to the current terminal size */static void term_size(int unused){	struct winsize ws;	(void) unused;	if ((ioctl(1, TIOCGWINSZ, &ws) != -1) && ws.ws_row > 10) {		cols = ws.ws_col;		rows = ws.ws_row;	} else {		cols = 80;		rows = 24;	}}static void sigint_handler(int unused){	(void) unused;	delay = 0;}static void usage(const char *cmd){	fprintf(stderr, "usage: %s [options]\n\n", cmd);	fprintf(stderr, "options:\n");	fprintf(stderr, "  --delay=n, -d n    "		"delay n seconds between updates\n");	fprintf(stderr, "  --once, -o         "		"only display once, then exit\n");	fprintf(stderr, "  --sort=S, -s S     "		"specify sort criteria S (see below)\n");	fprintf(stderr, "  --version, -V      "		"display version information and exit\n");	fprintf(stderr, "  --help             display this help and exit\n\n");	fprintf(stderr, "The following are valid sort criteria:\n");	fprintf(stderr, "  a: sort by number of active objects\n");	fprintf(stderr, "  b: sort by objects per slab\n");	fprintf(stderr, "  c: sort by cache size\n");	fprintf(stderr, "  l: sort by number of slabs\n");	fprintf(stderr, "  v: sort by number of active slabs\n");	fprintf(stderr, "  n: sort by name\n");	fprintf(stderr, "  o: sort by number of objects\n");	fprintf(stderr, "  p: sort by pages per slab\n");	fprintf(stderr, "  s: sort by object size\n");	fprintf(stderr, "  u: sort by cache utilization\n");}/* * set_sort_func - return the slab_sort_func that matches the given key. * On unrecognizable key, DEF_SORT_FUNC is returned. */static void * set_sort_func(char key){	switch (key) {	case 'n':		return sort_name;	case 'o':		return sort_nr_objs;	case 'a':		return sort_nr_active_objs;	case 's':		return sort_obj_size;	case 'b':		return sort_objs_per_slab;	case 'p':		return sort_pages_per_slab;	case 'l':		return sort_nr_slabs;	case 'v':		return sort_nr_active_slabs;	case 'c':		return sort_cache_size;	case 'u':		return sort_use;	default:		return DEF_SORT_FUNC;	}}static void parse_input(char c){	c = toupper(c);	switch(c) {	case 'A':		sort_func = sort_nr_active_objs;		break;	case 'B':		sort_func = sort_objs_per_slab;		break;	case 'C':		sort_func = sort_cache_size;		break;	case 'L':		sort_func = sort_nr_slabs;		break;	case 'V':		sort_func = sort_nr_active_slabs;		break;	case 'N':		sort_func = sort_name;		break;	case 'O':		sort_func = sort_nr_objs;		break;	case 'P':		sort_func = sort_pages_per_slab;		break;	case 'S':		sort_func = sort_obj_size;		break;	case 'U':		sort_func = sort_use;		break;	case 'Q':		delay = 0;		break;	}}int main(int argc, char *argv[]){	int o;	unsigned short old_rows;	struct slab_info *slab_list = NULL;	struct option longopts[] = {		{ "delay",	1, NULL, 'd' },		{ "sort",	1, NULL, 's' },		{ "once",	0, NULL, 'o' },		{ "help",	0, NULL, 'h' },		{ "version",	0, NULL, 'V' },		{  NULL,	0, NULL, 0 }	};	sort_func = DEF_SORT_FUNC;	while ((o = getopt_long(argc, argv, "d:s:ohV", longopts, NULL)) != -1) {		int ret = 1;		switch (o) {		case 'd':			errno = 0;			delay = strtol(optarg, NULL, 10);			if (errno) {				perror("strtoul");				return 1;			}			if (delay < 0) {				fprintf(stderr, "error: can't have a "\					"negative delay\n");				exit(1);			}			break;		case 's':			sort_func = set_sort_func(optarg[0]);			break;		case 'o':			delay = 0;			break;		case 'V':			display_version();			return 0;		case 'h':			ret = 0;		default:			usage(argv[0]);			return ret;		}	}	if (tcgetattr(0, &saved_tty) == -1)		perror("tcgetattr");	initscr();	term_size(0);	old_rows = rows;	resizeterm(rows, cols);	signal(SIGWINCH, term_size);	signal(SIGINT, sigint_handler);	do {		struct slab_info *curr;		struct slab_stat stats = SLAB_STAT_ZERO;		struct timeval tv;		fd_set readfds;		char c;		int i;		if (get_slabinfo(&slab_list, &stats))			break;		if (old_rows != rows) {			resizeterm(rows, cols);			old_rows = rows;		}		move(0,0);		printw(	" Active / Total Objects (%% used)    : %d / %d (%.1f%%)\n"			" Active / Total Slabs (%% used)      : %d / %d (%.1f%%)\n"			" Active / Total Caches (%% used)     : %d / %d (%.1f%%)\n"			" Active / Total Size (%% used)       : %.2fK / %.2fK (%.1f%%)\n"			" Minimum / Average / Maximum Object : %.2fK / %.2fK / %.2fK\n\n",			stats.nr_active_objs, stats.nr_objs, 100.0 * stats.nr_active_objs / stats.nr_objs,			stats.nr_active_slabs, stats.nr_slabs, 100.0 * stats.nr_active_slabs / stats.nr_slabs,			stats.nr_active_caches, stats.nr_caches, 100.0 * stats.nr_active_caches / stats.nr_caches,			stats.active_size / 1024.0, stats.total_size / 1024.0, 100.0 * stats.active_size / stats.total_size,			stats.min_obj_size / 1024.0, stats.avg_obj_size / 1024.0, stats.max_obj_size / 1024.0		);		slab_list = slabsort(slab_list);		attron(A_REVERSE);		printw(	"%6s %6s %4s %8s %6s %8s %10s %-23s\n",			"OBJS", "ACTIVE", "USE", "OBJ SIZE", "SLABS",			"OBJ/SLAB", "CACHE SIZE", "NAME");		attroff(A_REVERSE);		curr = slab_list;		for (i = 0; i < rows - 8 && curr->next; i++) {			printw("%6u %6u %3u%% %7.2fK %6u %8u %9uK %-23s\n",				curr->nr_objs, curr->nr_active_objs, curr->use,				curr->obj_size / 1024.0, curr->nr_slabs,				curr->objs_per_slab, (unsigned)(curr->cache_size / 1024),				curr->name);			curr = curr->next;		}		refresh();		put_slabinfo(slab_list);		FD_ZERO(&readfds);		FD_SET(0, &readfds);		tv.tv_sec = delay;		tv.tv_usec = 0;		if (select(1, &readfds, NULL, NULL, &tv) > 0) {			if (read(0, &c, 1) != 1)				break;			parse_input(c);		}	} while (delay);	tcsetattr(0, TCSAFLUSH, &saved_tty);	free_slabinfo(slab_list);	endwin();	return 0;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品天美传媒| 极品少妇一区二区| 国产中文字幕一区| 欧美曰成人黄网| 国产三级精品在线| 日韩av在线免费观看不卡| 成人福利视频在线看| 欧美一区二区三区四区五区| 亚洲视频每日更新| 激情伊人五月天久久综合| 精品视频全国免费看| 国产精品伦理一区二区| 看电视剧不卡顿的网站| 欧美美女视频在线观看| 亚洲欧美日韩在线| 国产成人一级电影| 精品福利视频一区二区三区| 亚洲一区二区在线免费观看视频| 成人av网站大全| 中文字幕精品在线不卡| 久久精品国产第一区二区三区| 欧美美女喷水视频| 亚洲va天堂va国产va久| 色诱亚洲精品久久久久久| 国产精品国产自产拍在线| 国产精品1区二区.| 精品国产91乱码一区二区三区| 蜜臀va亚洲va欧美va天堂| 欧美日韩国产另类一区| 亚洲国产精品影院| 欧美日韩国产在线观看| 一区二区三区产品免费精品久久75| 99精品一区二区三区| 亚洲丝袜制服诱惑| 91视视频在线观看入口直接观看www | 国产视频一区在线播放| 日韩三级视频在线观看| 欧美国产日韩亚洲一区| 精品一区二区在线播放| 亚洲精品一区二区三区蜜桃下载 | 国产欧美日韩在线| 国内精品伊人久久久久av一坑 | 日韩欧美国产三级电影视频| 青娱乐精品在线视频| 日韩欧美一区在线| 国产精品伊人色| 国产精品国产三级国产a| 97成人超碰视| 五月婷婷综合网| 日韩精品专区在线| 国产一本一道久久香蕉| 中文字幕精品一区| 91美女视频网站| 日韩中文字幕1| 久久九九全国免费| 色噜噜狠狠色综合中国| 亚洲成人一区在线| 亚洲精品在线观看网站| av一区二区三区黑人| 亚洲小说欧美激情另类| 日韩精品一区二区三区四区视频 | 日韩专区一卡二卡| 久久久久久影视| 91猫先生在线| 久久99久久99精品免视看婷婷| 国产日韩精品久久久| 色综合色狠狠天天综合色| 日本成人在线电影网| 欧美韩日一区二区三区四区| 欧美日韩一区二区三区在线看| 久久狠狠亚洲综合| 国产精品久久久久久久午夜片| 欧美日韩中字一区| 国产成人免费在线观看| 亚洲福利视频一区| 国产欧美日韩一区二区三区在线观看| 在线观看www91| 国产精品一级在线| 亚洲无线码一区二区三区| 久久久精品免费观看| 欧美色精品在线视频| 国产大片一区二区| 日本一区中文字幕| 亚洲黄色片在线观看| 久久久亚洲精华液精华液精华液| 精品视频免费看| 91在线观看下载| 国产黄色精品网站| 免费不卡在线视频| 亚洲香肠在线观看| 亚洲婷婷在线视频| 国产欧美一区二区三区鸳鸯浴 | 一区二区在线观看免费| 久久久五月婷婷| 欧美一级免费大片| 欧美日韩一区二区三区在线看| 成人美女视频在线看| 久久99精品久久久久久久久久久久| 一区av在线播放| 亚洲欧美视频一区| 欧美高清在线精品一区| 精品精品国产高清a毛片牛牛| 欧美日产在线观看| 欧美视频中文字幕| 欧美在线视频日韩| 91在线播放网址| 99re热这里只有精品视频| 福利视频网站一区二区三区| 国产在线精品一区在线观看麻豆| 日本亚洲一区二区| 免费看黄色91| 捆绑调教一区二区三区| 喷水一区二区三区| 久久国产欧美日韩精品| 免费人成精品欧美精品| 麻豆一区二区三区| 麻豆freexxxx性91精品| 久久99精品久久久久久| 国产一区二区三区四区五区美女| 精品中文字幕一区二区| 精品一区在线看| 激情伊人五月天久久综合| 国模无码大尺度一区二区三区| 国内久久精品视频| 成人精品视频一区二区三区尤物| www.亚洲精品| 91国模大尺度私拍在线视频| 欧美午夜理伦三级在线观看| 欧美日本一道本| 欧美成人三级在线| 亚洲国产成人午夜在线一区| 中文字幕一区视频| 亚洲国产成人av| 久久99国内精品| 不卡一区在线观看| 欧美性感一类影片在线播放| 欧美日韩激情在线| 2023国产精品视频| 国产精品天美传媒沈樵| 亚洲午夜激情网页| 激情五月播播久久久精品| 成人激情黄色小说| 欧美日韩免费观看一区三区| 欧美一区二区精品| 国产精品日产欧美久久久久| 亚洲精品乱码久久久久久久久 | k8久久久一区二区三区| 一本色道综合亚洲| 日韩精品一区二区三区四区 | 国产精品高潮呻吟| 午夜精品一区二区三区电影天堂| 久久国产免费看| 色综合久久中文综合久久牛| 欧美一区二区三区播放老司机| 国产欧美日韩视频一区二区| 亚洲午夜激情网站| 国产福利一区在线| 欧美精品乱码久久久久久| 国产欧美精品区一区二区三区| 亚洲一区二区中文在线| 国产成人午夜精品5599| 欧美日韩精品专区| 国产精品久久精品日日| 麻豆91在线播放免费| 色狠狠色狠狠综合| 国产亚洲精品精华液| 天堂蜜桃91精品| 99re这里只有精品6| 久久影院午夜论| 日本中文字幕一区二区有限公司| 福利电影一区二区| 日韩一区二区三区免费观看| 一区二区在线免费观看| 成人丝袜高跟foot| www激情久久| 蜜臀91精品一区二区三区| 色菇凉天天综合网| 亚洲欧洲精品一区二区精品久久久| 老司机精品视频导航| 欧美日韩一区国产| 亚洲激情男女视频| www.久久久久久久久| 欧美激情综合五月色丁香小说| 日本欧美加勒比视频| 欧美日韩亚洲综合| 亚洲精品日日夜夜| 99精品国产热久久91蜜凸| 国产精品无人区| 国产91在线看| 国产精品网站导航| 成人夜色视频网站在线观看| 久久一日本道色综合| 国产自产高清不卡| 精品国产一区二区精华| 青青青爽久久午夜综合久久午夜| 欧美欧美欧美欧美| 日韩电影免费在线看| 欧美日韩精品综合在线| 天堂午夜影视日韩欧美一区二区| 欧美日韩一级二级三级|