⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 memory.c

📁 ucd-snmp源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
#include <config.h>#if HAVE_STDLIB_H#include <stdlib.h>#endif#if HAVE_UNISTD_H#include <unistd.h>#endif#if HAVE_FCNTL_H#include <fcntl.h>#endif#include <ctype.h>#include <signal.h>#if HAVE_MACHINE_PARAM_H#include <machine/param.h>#endif#if HAVE_SYS_VMMETER_H#if !defined(bsdi2) && !defined(netbsd1)#include <sys/vmmeter.h>#endif#endif#if HAVE_SYS_CONF_H#include <sys/conf.h>#endif#if HAVE_ASM_PAGE_H#include <asm/page.h>#endif#if HAVE_SYS_SWAP_H#include <sys/swap.h>#endif#if HAVE_SYS_FS_H#include <sys/fs.h>#else#if HAVE_UFS_FS_H#include <ufs/fs.h>#else#ifdef HAVE_SYS_STAT_H#include <sys/stat.h>#endif#ifdef HAVE_SYS_VNODE_H#include <sys/vnode.h>#endif#ifdef HAVE_UFS_UFS_QUOTA_H#include <ufs/ufs/quota.h>#endif#ifdef HAVE_UFS_UFS_INODE_H#include <ufs/ufs/inode.h>#endif#ifdef HAVE_SYS_PARAM_H#include <sys/param.h>#endif#if HAVE_UFS_FFS_FS_H#include <ufs/ffs/fs.h>#endif#endif#endif#if HAVE_MTAB_H#include <mtab.h>#endif#include <sys/stat.h>#include <errno.h>#if HAVE_FSTAB_H#include <fstab.h>#endif#if HAVE_SYS_STATVFS_H#include <sys/statvfs.h>#endif#if HAVE_SYS_VFS_H#include <sys/vfs.h>#endif#if (!defined(HAVE_STATVFS)) && defined(HAVE_STATFS)#if HAVE_SYS_PARAM_H#include <sys/param.h>#endif#if HAVE_SYS_MOUNT_H#include <sys/mount.h>#endif#if HAVE_SYS_SYSCTL_H#include <sys/sysctl.h>#endif#define statvfs statfs#endif#if HAVE_VM_SWAP_PAGER_H#include <vm/swap_pager.h>#endif#if HAVE_SYS_FIXPOINT_H#include <sys/fixpoint.h>#endif#if HAVE_MALLOC_H#include <malloc.h>#endif#if HAVE_STRING_H#include <string.h>#endif#if TIME_WITH_SYS_TIME# include <sys/time.h># include <time.h>#else# if HAVE_SYS_TIME_H#  include <sys/time.h># else#  include <time.h># endif#endif#if defined(hpux10) || defined(hpux11)#include <sys/pstat.h>#endif#include "mibincl.h"#include "mibdefs.h"#include "struct.h"#include "util_funcs.h"#include "memory.h"#include "auto_nlist.h"#include "read_config.h"#include "agent_read_config.h"int minimumswap;#ifndef linuxstatic int pageshift;           /* log base 2 of the pagesize */#endif#ifndef bsdi2#ifdef NSWAPDEV_SYMBOLint nswapdev=10;            /* taken from <machine/space.h> */#endif#ifdef NSWAPFS_SYMBOLint nswapfs=10;            /* taken from <machine/space.h> */#endif#endif	/* !bsdi2 */#define DEFAULTMINIMUMSWAP 16000  /* kilobytes */static FindVarMethod var_extensible_mem;void init_memory(void){#ifndef linux  int pagesize;#ifdef PHYSMEM_SYMBOL auto_nlist(PHYSMEM_SYMBOL,0,0);#endif#ifdef TOTAL_MEMORY_SYMBOL auto_nlist(TOTAL_MEMORY_SYMBOL,0,0);#endif#ifdef MBSTAT_SYMBOL auto_nlist(MBSTAT_SYMBOL,0,0);#endif#ifdef SWDEVT_SYMBOL auto_nlist(SWDEVT_SYMBOL,0,0);#endif#ifdef FSWDEVT_SYMBOL auto_nlist(FSWDEVT_SYMBOL,0,0);#endif#ifdef NSWAPFS_SYMBOL auto_nlist(NSWAPFS_SYMBOL,0,0);#endif#ifdef NSWAPDEV_SYMBOL auto_nlist(NSWAPDEV_SYMBOL,0,0);#endif#ifndef bsdi2#ifdef NSWAPDEV_SYMBOL  if (auto_nlist(NSWAPDEV_SYMBOL,(char *) &nswapdev, sizeof(nswapdev)) == 0)    return;#endif#ifdef NSWAPFS_SYMBOL  if (auto_nlist(NSWAPFS_SYMBOL,(char *) &nswapfs, sizeof(nswapfs)) == 0)    return;#endif#endif  pagesize = 1 << PGSHIFT;  pageshift = 0;  while (pagesize > 1) {    pageshift++;    pagesize >>= 1;  }  pageshift -= 10;#endif  {        struct variable2 extensible_mem_variables[] = {    {MIBINDEX, ASN_INTEGER, RONLY, var_extensible_mem,1,{MIBINDEX}},    {ERRORNAME, ASN_OCTET_STR, RONLY, var_extensible_mem, 1, {ERRORNAME }},    {MEMTOTALSWAP, ASN_INTEGER, RONLY, var_extensible_mem, 1, {MEMTOTALSWAP}},    {MEMAVAILSWAP, ASN_INTEGER, RONLY, var_extensible_mem, 1, {MEMAVAILSWAP}},    {MEMTOTALREAL, ASN_INTEGER, RONLY, var_extensible_mem, 1, {MEMTOTALREAL}},    {MEMAVAILREAL, ASN_INTEGER, RONLY, var_extensible_mem, 1, {MEMAVAILREAL}},    {MEMTOTALSWAPTXT, ASN_INTEGER, RONLY, var_extensible_mem, 1, {MEMTOTALSWAPTXT}},    {MEMUSEDSWAPTXT, ASN_INTEGER, RONLY, var_extensible_mem, 1, {MEMUSEDSWAPTXT}},    {MEMTOTALREALTXT, ASN_INTEGER, RONLY, var_extensible_mem, 1, {MEMTOTALREALTXT}},    {MEMUSEDREALTXT, ASN_INTEGER, RONLY, var_extensible_mem, 1, {MEMUSEDREALTXT}},    {MEMTOTALFREE, ASN_INTEGER, RONLY, var_extensible_mem, 1, {MEMTOTALFREE}},    {MEMSWAPMINIMUM, ASN_INTEGER, RONLY, var_extensible_mem, 1, {MEMSWAPMINIMUM}},    {MEMSHARED, ASN_INTEGER, RONLY, var_extensible_mem, 1, {MEMSHARED}},    {MEMBUFFER, ASN_INTEGER, RONLY, var_extensible_mem, 1, {MEMBUFFER}},    {MEMCACHED, ASN_INTEGER, RONLY, var_extensible_mem, 1, {MEMCACHED}},    {ERRORFLAG, ASN_INTEGER, RONLY, var_extensible_mem, 1, {ERRORFLAG }},    {ERRORMSG, ASN_OCTET_STR, RONLY, var_extensible_mem, 1, {ERRORMSG }}  };/* Define the OID pointer to the top of the mib tree that we're   registering underneath */  oid mem_variables_oid[] = { EXTENSIBLEMIB,MEMMIBNUM };  /* register ourselves with the agent to handle our mib tree */  REGISTER_MIB("ucd-snmp/memory", extensible_mem_variables, variable2, \               mem_variables_oid);  snmpd_register_config_handler("swap", memory_parse_config,                                memory_free_config,"min-avail");  }}void memory_parse_config(const char *token, char *cptr){  minimumswap = atoi(cptr);}void memory_free_config (void) {    minimumswap = DEFAULTMINIMUMSWAP;}#ifdef linuxenum meminfo_row { meminfo_main = 0,		   meminfo_swap };enum meminfo_col { meminfo_total = 0, meminfo_used, meminfo_free,		   meminfo_shared, meminfo_buffers, meminfo_cached};#define MEMINFO_FILE "/proc/meminfo"static char buf[300];/* This macro opens FILE only if necessary and seeks to 0 so that successive   calls to the functions are more efficient.  It also reads the current   contents of the file into the global buf.*/#define FILE_TO_BUF(FILE) {					\    static int n, fd = -1;					\    if (fd == -1 && (fd = open(FILE, O_RDONLY)) == -1) {	\	return 0;						\    }								\    lseek(fd, 0L, SEEK_SET);					\    if ((n = read(fd, buf, sizeof buf - 1)) < 0) {		\	close(fd);						\	fd = -1;						\	return 0;						\    }								\    buf[n] = '\0';						\}#define MAX_ROW 3	/* these are a little liberal for flexibility */#define MAX_COL 7unsigned** meminfo(void) {    static unsigned *row[MAX_ROW + 1];		/* row pointers */    static unsigned num[MAX_ROW * MAX_COL];	/* number storage */    char *p;    int i, j, k, l;    unsigned long m;        FILE_TO_BUF(MEMINFO_FILE)    if (!row[0])				/* init ptrs 1st time through */	for (i=0; i < MAX_ROW; i++)		/* std column major order: */	    row[i] = num + MAX_COL*i;		/* A[i][j] = A + COLS*i + j */    p = buf;    for (i=0; i < MAX_ROW; i++)			/* zero unassigned fields */	for (j=0; j < MAX_COL; j++)	    row[i][j] = 0;    for (i=0; i < MAX_ROW && *p; i++) {		/* loop over rows */	while(*p && !isdigit(*p)) p++;		/* skip chars until a digit */	for (j=0; j < MAX_COL && *p; j++) {	/* scanf column-by-column */	    l = sscanf(p, "%u%n", &m, &k);	    m /= 1024;	    if (0x7fffffff < m) {	        *(row[i] + j) = 0x7fffffff;	    } else {	        *(row[i] + j) = (unsigned) m;            }	    p += k;				/* step over used buffer */	    if (*p == '\n' || l < 1)		/* end of line/buffer */		break;	}    }/*    row[i+1] = NULL;	terminate the row list, currently unnecessary */    return row;					/* NULL return ==> error */}unsigned memory(int iindex){	unsigned **mem = meminfo();        if (mem != NULL)          return mem[meminfo_main][iindex];        else          return -1;}unsigned memswap(int iindex){	unsigned **mem = meminfo();        if (mem != NULL)          return mem[meminfo_swap][iindex];        else          return -1;}#else#define pagetok(size) ((size) << pageshift)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -