sysinfo系统调用
作者:互联网
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
标签:info,调用,mem,系统,unsigned,long,printf,sysinfo,unit 来源: https://www.cnblogs.com/libra13179/p/14309738.html