Linux获取系统内存状况C语言实现

通过sysinfo函数可以获取系统内存的使用情况。通过man sysinfo 可以查看sysinfo函数的帮助如下:

NAME
       sysinfo - returns information on overall system statistics

SYNOPSIS
       #include <sys/sysinfo.h>

       int sysinfo(struct sysinfo *info);

DESCRIPTION
       Until Linux 2.3.16, sysinfo() used to return information in the following structure:

           struct sysinfo {
               long uptime;             /* Seconds since boot */
               unsigned long loads[3];  /* 1, 5, and 15 minute load averages */
               unsigned long totalram;  /* Total usable main memory size */
               unsigned long freeram;   /* Available memory size */
               unsigned long sharedram; /* Amount of shared memory */
               unsigned long bufferram; /* Memory used by buffers */
               unsigned long totalswap; /* Total swap space size */
               unsigned long freeswap;  /* swap space still available */
               unsigned short procs;    /* Number of current processes */
               char _f[22];             /* Pads structure to 64 bytes */
           };

       and the sizes were given in bytes.

       Since Linux 2.3.23 (i386), 2.3.48 (all architectures) the structure is:

           struct sysinfo {
               long uptime;             /* Seconds since boot */
               unsigned long loads[3];  /* 1, 5, and 15 minute load averages */
               unsigned long totalram;  /* Total usable main memory size */
               unsigned long freeram;   /* Available memory size */
               unsigned long sharedram; /* Amount of shared memory */
               unsigned long bufferram; /* Memory used by buffers */
               unsigned long totalswap; /* Total swap space size */
               unsigned long freeswap;  /* swap space still available */
               unsigned short procs;    /* Number of current processes */
               unsigned long totalhigh; /* Total high memory size */
               unsigned long freehigh;  /* Available high memory size */
               unsigned int mem_unit;   /* Memory unit size in bytes */
               char _f[20-2*sizeof(long)-sizeof(int)]; /* Padding to 64 bytes */
           };

       and the sizes are given as multiples of mem_unit bytes.

       sysinfo() provides a simple way of getting overall system statistics.  This is more portable than reading /dev/kmem.

RETURN VALUE
       On success, zero is returned.  On error, -1 is returned, and errno is set appropriately.

下面我们通过一个示例来演示如何使用:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/sysinfo.h>

int main(int argc,char **argv)
{
    struct sysinfo s_info;
    char info_buff[100];
    do
    {
        if(sysinfo(&s_info)==0)
        {
            sprintf(info_buff,"totalram: %.ld bytes",s_info.totalram);
            printf("%s\n",info_buff);

            sprintf(info_buff,"freeram: %.ld bytes",s_info.freeram);
            printf("%s\n",info_buff);

            sprintf(info_buff,"totalswap: %.ld bytes",s_info.totalswap);
            printf("%s\n",info_buff);

            sprintf(info_buff,"freeswap: %.ld bytes",s_info.freeswap);
            printf("%s\n",info_buff);

            sprintf(info_buff,"uptime: %.ld minutes",s_info.uptime/60);
            printf("%s\n",info_buff);

            printf("\n\n");
        }
        sleep(1);
    } while(0);
    return 0;
}

运行结果:

Linux系统C语言获取系统内存状况

赞(3)
未经允许不得转载:极客笔记 » Linux获取系统内存状况C语言实现
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址