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

📄 memory.c

📁 snmp的源代码,已经在我的ubuntu下编译通过
💻 C
📖 第 1 页 / 共 2 页
字号:
#include <net-snmp/net-snmp-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 <net-snmp/net-snmp-includes.h>#include <net-snmp/agent/net-snmp-agent-includes.h>#include <net-snmp/agent/auto_nlist.h>#include "mibdefs.h"#include "struct.h"#include "util_funcs.h"#include "memory.h"int             minimumswap;#ifndef linuxstatic int      pageshift;      /* log base 2 of the pagesize */#elsestatic int      log_procerr = 1;voidgetmem(unsigned long *memtotal, unsigned long *memfree, unsigned long *memshared,        unsigned long *buffers, unsigned long *cached, unsigned long *swaptotal,        unsigned long *swapfree);#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;voidinit_memory(void){#ifdef linux    unsigned long memtotal, memfree, memshared, buffers, cached, swaptotal,        swapfree;    /*     * call once, to log errors for missing vars, then turn off logging     * of those errors.     */    getmem(&memtotal, &memfree, &memshared, &buffers, &cached, &swaptotal,           &swapfree);    log_procerr = 0;#else    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 /* bsdi2 */    pagesize = 1 << PGSHIFT;    pageshift = 0;    while (pagesize > 1) {        pageshift++;        pagesize >>= 1;    }    pageshift -= 10;#endif /* linux */    {        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[] = { UCDAVIS_MIB, 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");    }}voidmemory_parse_config(const char *token, char *cptr){    minimumswap = atoi(cptr);}voidmemory_free_config(void){    minimumswap = DEFAULTMINIMUMSWAP;}#ifdef linux#define MEMINFO_FILE "/proc/meminfo"voidgetmem(unsigned long *memtotal, unsigned long *memfree, unsigned long *memshared,        unsigned long *buffers, unsigned long *cached, unsigned long *swaptotal,        unsigned long *swapfree){    int         statfd;    static char *buff = NULL;    static int  bsize = 0;    if ((statfd = open(MEMINFO_FILE, O_RDONLY, 0)) != -1) {        char *b;        if (bsize == 0) {            bsize = 128;            buff = malloc(bsize);        }        while (read(statfd, buff, bsize) == bsize) {            bsize += 256;            buff = realloc(buff, bsize);            close(statfd);            statfd = open(MEMINFO_FILE, O_RDONLY, 0);        }        close(statfd);        b = strstr(buff, "MemTotal: ");        if (b)             sscanf(b, "MemTotal: %lu", memtotal);        else {            if(log_procerr)            snmp_log(LOG_ERR, "No MemTotal line in /proc/meminfo\n");            *memtotal = 0;        }        b = strstr(buff, "MemFree: ");        if (b)             sscanf(b, "MemFree: %lu", memfree);        else {            if(log_procerr)            snmp_log(LOG_ERR, "No MemFree line in /proc/meminfo\n");            *memfree = 0;        }        b = strstr(buff, "MemShared: ");        if (b)            sscanf(b, "MemShared: %lu", memshared);        else {            if(log_procerr)            {            if (0 == netsnmp_os_prematch("Linux","2.4"))            snmp_log(LOG_ERR, "No MemShared line in /proc/meminfo\n");            }            *memshared = 0;        }        b = strstr(buff, "Buffers: ");        if (b)            sscanf(b, "Buffers: %lu", buffers);        else {            if(log_procerr)            snmp_log(LOG_ERR, "No Buffers line in /proc/meminfo\n");            *buffers = 0;        }        b = strstr(buff, "Cached: ");        if (b)            sscanf(b, "Cached: %lu", cached);        else {            if(log_procerr)            snmp_log(LOG_ERR, "No Cached line in /proc/meminfo\n");            *cached = 0;        }        b = strstr(buff, "SwapTotal: ");        if (b)            sscanf(b, "SwapTotal: %lu", swaptotal);        else {            if(log_procerr)            snmp_log(LOG_ERR, "No SwapTotal line in /proc/meminfo\n");            *swaptotal = 0;        }        b = strstr(buff, "SwapFree: ");        if (b)            sscanf(b, "SwapFree: %lu", swapfree);        else {            if(log_procerr)            snmp_log(LOG_ERR, "No SwapFree line in /proc/meminfo\n");            *swapfree = 0;        }    } else {        snmp_log_perror(MEMINFO_FILE);    }}enum memory_index { memtotal, memfree, memshared, buffers, cached, swaptotal,     swapfree};unsignedmemory(int iindex){    unsigned long   mem_total[2], mem_free[2], mem_shared[2], mem_buffers[2],                     mem_cached[2],  swap_total[2], swap_free[2];    getmem(mem_total, mem_free, mem_shared, mem_buffers, mem_cached, swap_total,           swap_free);    switch (iindex) {

⌨️ 快捷键说明

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