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

📄 memory_solaris.c

📁 开发snmp的开发包有两个开放的SNMP开发库
💻 C
字号:
#include <net-snmp/net-snmp-config.h>#include <net-snmp/net-snmp-includes.h>#include <net-snmp/agent/net-snmp-agent-includes.h>#include <net-snmp/agent/hardware/memory.h>#include <unistd.h>#include <kstat.h>#include <sys/stat.h>#include <sys/swap.h>#ifndef MAXSTRSIZE#define MAXSTRSIZE 1024#endifvoid getSwapInfo(long *total_mem, long *free_mem);    /*     * Load the latest memory usage statistics     */int netsnmp_mem_arch_load( netsnmp_cache *cache, void *magic ) {#ifndef _SC_PHYS_PAGES    extern kstat_ctl_t *kstat_fd;   /* defined in kernel_sunos5.c */    kstat_t        *ksp1;    kstat_named_t  *kn;#endif#ifdef SC_AINFO    struct anoninfo ai;#endif    long   phys_mem   = 0;    long   phys_free  = 0;    long   swap_pages = 0;    long   swap_free  = 0;    long   pagesize   = 0;    netsnmp_memory_info *mem;    /*     * Retrieve the memory information from the underlying O/S...     */    pagesize = getpagesize();    getSwapInfo( &swap_pages, &swap_free );#ifdef SC_AINFO    swapctl(SC_AINFO, &ai);#endif#ifdef _SC_PHYS_PAGES    phys_mem  = sysconf(_SC_PHYS_PAGES);    phys_free = sysconf(_SC_AVPHYS_PAGES);#else    ksp1 = kstat_lookup(kstat_fd, "unix", 0, "system_pages");    kstat_read(kstat_fd, ksp1, 0);    kn = kstat_data_lookup(ksp1, "physmem");    phys_mem  = kn->value.ul;#ifdef SC_AINFO    phys_free = (ai.ani_max - ai.ani_resv) - swap_free;#else    phys_free = -1;#endif#endif    /*     * ... and save this in a standard form.     */    mem = netsnmp_memory_get_byIdx( NETSNMP_MEM_TYPE_PHYSMEM, 1 );    if (!mem) {        snmp_log_perror("No Memory info entry");    } else {        if (!mem->descr)            mem->descr = strdup( "Physical memory" );        mem->units = pagesize;        mem->size  = phys_mem;        mem->free  = phys_free;        mem->other = -1;    }#ifdef SC_AINFO    mem = netsnmp_memory_get_byIdx( NETSNMP_MEM_TYPE_VIRTMEM, 1 );    if (!mem) {        snmp_log_perror("No Virtual Memory info entry");    } else {        if (!mem->descr)            mem->descr = strdup( " Virtual memory" );        mem->units = pagesize;		/* or 1024? */        mem->size  = ai.ani_max;        mem->free  = (ai.ani_max - ai.ani_resv);        mem->other = -1;    }#endif    mem = netsnmp_memory_get_byIdx( NETSNMP_MEM_TYPE_SWAP, 1 );    if (!mem) {        snmp_log_perror("No Swap info entry");    } else {        if (!mem->descr)            mem->descr = strdup( "Swap space" );        mem->units = pagesize;        mem->size  = swap_pages;        mem->free  = swap_free;        mem->other = -1;    }/*    mem = netsnmp_memory_get_byIdx( NETSNMP_MEM_TYPE_MISC, 1 );    if (!mem) {        snmp_log_perror("No Buffer, etc info entry");    } else {        mem->units = getpagesize();        mem->size = -1;        mem->free = getTotalFree();        mem->other = -1;    }*/    return 0;}/* * Adapted from UCD implementation */voidgetSwapInfo(long *total_mem, long *total_free){    size_t          num;    int             i, n;    swaptbl_t      *s;    netsnmp_memory_info *mem;    char           *strtab;    char buf[1024];    num = swapctl(SC_GETNSWP, 0);    s = malloc(num * sizeof(swapent_t) + sizeof(struct swaptable));    if (!s)        return;    strtab = (char *) malloc((num + 1) * MAXSTRSIZE);    if (!strtab) {        free(s);        return;    }    for (i = 0; i < (num + 1); i++) {        s->swt_ent[i].ste_path = strtab + (i * MAXSTRSIZE);    }    s->swt_n = num + 1;    n = swapctl(SC_LIST, s);    if (n > 1) {      for (i = 0; i < n; ++i) {        mem = netsnmp_memory_get_byIdx( NETSNMP_MEM_TYPE_SWAP+1+i, 1 );        if (!mem)            continue;        if (!mem->descr) {            sprintf(buf, "swap #%d %s", i, s->swt_ent[i].ste_path);            mem->descr = strdup( buf );        }        mem->units = getpagesize();        mem->size  = s->swt_ent[i].ste_pages;        mem->free  = s->swt_ent[i].ste_free;        mem->other = -1;        *total_mem  += mem->size;        *total_free += mem->free;      }    }    else {        *total_mem  = s->swt_ent[0].ste_pages;        *total_free = s->swt_ent[0].ste_free;    }    free(strtab);    free(s);}

⌨️ 快捷键说明

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