Linux中,可以用sysinfo来获取系统相关信息。

#include <sys/sysinfo.h>

int sysinfo(struct sysinfo *info);

 

描述:

在Linux 2.3.16之前,sysinfo()用于返回以下结构中的信息:

struct sysinfo {
        long uptime;             /* 启动到现在经过的时间 */
        unsigned long loads[3];  /* I/O 在1, 5, 和 15 分钟内加载的平均时间 */
        unsigned long totalram;  /* 总的可用的内存大小 */
        unsigned long freeram;   /* 还未被使用的内存大小  */
        unsigned long sharedram; /* 共享的存储器的大小 */
        unsigned long bufferram; /* 缓冲区大小 */
        unsigned long totalswap; /* 交换区大小 */
        unsigned long freeswap;  /* 还可用的交换区大小 */
        unsigned short procs;    /* 当前进程数目 */
        char _f[22];             /* 64字节的补丁结构*/
};

 

大小以字节为单位。

自从Linux 2.3.23(i386),2.3.48(所有架构)后的结构是:

struct sysinfo {
        long uptime;             /* 启动到现在经过的时间 */
        unsigned long loads[3];  /* I/O 在1, 5, 和 15 分钟内执行的平均时间 */
        unsigned long totalram;  /* 总的可用的内存大小  */
        unsigned long freeram;   /* 还未被使用的内存大小  */
        unsigned long sharedram; /* 共享的存储器的大小 */
        unsigned long bufferram; /* 缓冲区大小 */
        unsigned long totalswap; /* 交换区大小 */
        unsigned long freeswap;  /* 还可用的交换区大小 */
        unsigned short procs;    /* 当前进程数目 */
        unsigned long totalhigh; /* 高内存大小 */
        unsigned long freehigh;  /* 可用的高内存大小 */
        unsigned int mem_unit;   /* 内存单元大小 */
        char _f[20-2*sizeof(long)-sizeof(int)]; /* 填充到64个字节 */
};

 

 

并且尺寸以mem_unit字节的倍数给出。

sysinfo()提供了获取整个系统统计信息的简单方法。 这比读取/ dev / kmem更方便。

返回值:

成功时返回零。 出错时,返回-1,并适当地设置errno。

出错值:

EFAULT 指向struct sysinfo的指针是无效的

版本:

Linux内核自0.98.pl6开始有sysinfo()系统调用。

遵守:

这个函数是Linux专用的,不应该用在可移植的程序中。

查看:

proc(5)

 

代码事例:

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

int main(void)
{
        struct sysinfo info;

        sysinfo(&info);

        printf("uptime = %ld\n",info.uptime);
        printf("loads = %ld %ld %ld\n",info.loads[0],info.loads[1],info.loads[2]);
        printf("totalram = %lx\n",info.totalram*info.mem_unit);
        printf("freeram = %lx\n",info.freeram*info.mem_unit);
        printf("sharedram = %lx\n",info.sharedram*info.mem_unit);
        printf("bufferram = %lx\n",info.bufferram*info.mem_unit);
        printf("totalswap = %lx\n",info.totalswap*info.mem_unit);
        printf("freeswap = %lx\n",info.freeswap*info.mem_unit);
        printf("procs = %d\n",info.procs);
        printf("totalhigh = %lx\n",info.totalhigh*info.mem_unit);
        printf("freehigh = %lx\n",info.freehigh*info.mem_unit);
        printf("mem_unit = %d\n",info.mem_unit);

        return 0;
}

 

输出结果:

uptime = 231884
loads = 47136 39040 21696
totalram = 7dd70000
freeram = 888a000
sharedram = 34dd000
bufferram = 4075000
totalswap = cfdff000
freeswap = a8f20000
procs = 664
totalhigh = 483e2000
freehigh = 1ea0000
mem_unit = 4096

 

 
 
posted on 2021-01-21 18:55  陌鉎こ城sHi  阅读(250)  评论(0编辑  收藏  举报