`

linux sysinfo函数使用方法--获取内存大小

 
阅读更多
http://hi.baidu.com/%C0%CB%C2%FE%B5%C4%D0%A1%D0%AB%D7%D3/blog/item/1a3fef35202d4344251f1430.html

Linux中,sysinfo是用来获取系统相关信息的结构体。
函数声明和原型:
#include<sys/sysinfo.h>

intsysinfo(structsysinfo*info);

结构体信息:
在Linux2.3.16中,结构体的信息是(单位是字节):

structsysinfo{
long uptime;
/*启动到现在经过的时间*/
unsignedlongloads[3];
/*1,5,and15minuteloadaverages */
unsignedlongtotalram;/*总的可用的内存大小*/
unsignedlongfreeram;/*还未被使用的内存大小*/
unsignedlongsharedram;/*共享的存储器的大小*/
unsignedlongbufferram;/*缓冲区大小*/
unsignedlongtotalswap;/*交换区大小*/
unsignedlongfreeswap;/*还可用的交换区大小*/
unsignedshortprocs;/*当前进程数目*/
char _f[22];/*64字节的补丁结构*/
};

在Linux2.3.23(i386),2.3.48(allarchitectures)中,结构体的信息是(单位是mem_unit字节):

structsysinfo{
long uptime;/*启动到现在经过的时间*/
unsignedlongloads[3];
/*1,5,and15minuteloadaverages */
unsignedlongtotalram;/*总的可用的内存大小*/
unsignedlongfreeram;/*还未被使用的内存大小*/
unsignedlongsharedram;/*共享的存储器的大小*/
unsignedlongbufferram;/*共享的存储器的大小*/
unsignedlongtotalswap;/*交换区大小*/
unsignedlongfreeswap;/*还可用的交换区大小*/
unsignedshortprocs;/*当前进程数目*/
unsignedlongtotalhigh;/*总的高内存大小*/
unsignedlongfreehigh;/*可用的高内存大小*/
unsignedintmem_unit;/*以字节为单位的内存大小*/
char_f[20-2*sizeof(long)-sizeof(int)];
/*libc5的补丁
};

返回值:
操作成功返回0,错误返回-1;
样例:
#include<stdio.h>

#include<linux/unistd.h>/*包含调用_syscallX宏等相关信息*/
#include<linux/kernel.h>/*包含sysinfo结构体信息*/

_syscall1(int,sysinfo,structsysinfo*,info);
//usingnamespacestd;
intmain(intargc,char*agrv[])
{
structsysinfos_info;
interror;

error=sysinfo(&s_info);
printf("\n\ncodeerror=%d\n",error);
printf("Uptime=%ds\nLoad:1min%d/5min%d/15min%d\n"
"RAM:total%d/free%d/shared%d\n"
"Memoryinbuffers=%d\nSwap:total%d/free%d\n"
"Numberofprocesses=%d\n",
s_info.uptime,s_info.loads[0],
s_info.loads[1],s_info.loads[2],
s_info.totalram,s_info.freeram,
s_info.totalswap,s_info.freeswap,
s_info.procs );
return0;
}

/*输出结果:
/home/chenhd/future>./Sysinfo_1
codeerror=0
Uptime=154s
Load:1min22976/5min13888/15min5408
RAM:total128307200/free55656448/shared263168000
Memoryinbuffers=263168000
Swap:total50/free1073821804
Numberofprocesses=1073823352
/home/chenhd/future>
*/

// an example
int main()
{
FILE *fp;
char str[81];
memset(str,0,81);
fp=popen("cat /proc/meminfo | grep MemTotal:|sed -e 's/.*:[^0-9]//'","r");
if(fp < 0)
{
printf("无法读取ram信息\n");
exit(1);
}
fgets(str,80,fp);
fclose(fp);
if (cpuinfo != NULL)
{
strncpy(cpuinfo,str,80);
}
#include <linux/unistd.h> /* 包含调用 _syscallX 宏等相关信息*/

#include <linux/kernel.h> /* 包含sysinfo结构体信息*/
#include <sys/sysinfo.h>
struct sysinfo s_info;
int error;
error = sysinfo(&s_info);

gulong spd=atoi(str);
printf("您ram是%lu kb %s %lu\n",spd, str, s_info.totalram);
return spd;
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics