linux sysinfo函数使用方法--获取内存大小
2011-12-04 08:48
447 查看
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>
int sysinfo(struct sysinfo *info);
结构体信息:
在Linux 2.3.16中,结构体的信息是(单位是字节):
struct sysinfo {
long uptime;
/* 启动到现在经过的时间 */
unsigned long loads[3];
/* 1, 5, and 15 minute load averages */
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 (all architectures)中,结构体的信息是(单位是mem_unit字节):
struct sysinfo {
long uptime; /* 启动到现在经过的时间 */
unsigned long loads[3];
/* 1, 5, and 15 minute load averages */
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)];
/* libc5的补丁
};
返回值:
操作成功返回0,错误返回-1;
样例:
#include <stdio.h>
#include <linux/unistd.h> /* 包含调用 _syscallX 宏等相关信息*/
#include <linux/kernel.h> /* 包含sysinfo结构体信息*/
_syscall1(int, sysinfo, struct sysinfo*, info);
//using namespace std;
int main(int argc, char *agrv[])
{
struct sysinfo s_info;
int error;
error = sysinfo(&s_info);
printf("\n\ncode error=%d\n",error);
printf("Uptime = %ds\nLoad: 1 min%d / 5 min %d / 15 min %d\n"
"RAM: total %d / free %d /shared%d\n"
"Memory in buffers = %d\nSwap:total%d/free%d\n"
"Number of processes = %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 );
return 0;
}
/*输出结果:
/home/chenhd/future> ./Sysinfo_1
code error=0
Uptime = 154s
Load: 1 min22976 / 5 min 13888 / 15 min 5408
RAM: total 128307200 / free 55656448 /shared263168000
Memory in buffers = 263168000
Swap:total50/free1073821804
Number of processes = 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;
}
Linux中,sysinfo是用来获取系统相关信息的结构体。
函数声明和原型:
#include <sys/sysinfo.h>
int sysinfo(struct sysinfo *info);
结构体信息:
在Linux 2.3.16中,结构体的信息是(单位是字节):
struct sysinfo {
long uptime;
/* 启动到现在经过的时间 */
unsigned long loads[3];
/* 1, 5, and 15 minute load averages */
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 (all architectures)中,结构体的信息是(单位是mem_unit字节):
struct sysinfo {
long uptime; /* 启动到现在经过的时间 */
unsigned long loads[3];
/* 1, 5, and 15 minute load averages */
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)];
/* libc5的补丁
};
返回值:
操作成功返回0,错误返回-1;
样例:
#include <stdio.h>
#include <linux/unistd.h> /* 包含调用 _syscallX 宏等相关信息*/
#include <linux/kernel.h> /* 包含sysinfo结构体信息*/
_syscall1(int, sysinfo, struct sysinfo*, info);
//using namespace std;
int main(int argc, char *agrv[])
{
struct sysinfo s_info;
int error;
error = sysinfo(&s_info);
printf("\n\ncode error=%d\n",error);
printf("Uptime = %ds\nLoad: 1 min%d / 5 min %d / 15 min %d\n"
"RAM: total %d / free %d /shared%d\n"
"Memory in buffers = %d\nSwap:total%d/free%d\n"
"Number of processes = %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 );
return 0;
}
/*输出结果:
/home/chenhd/future> ./Sysinfo_1
code error=0
Uptime = 154s
Load: 1 min22976 / 5 min 13888 / 15 min 5408
RAM: total 128307200 / free 55656448 /shared263168000
Memory in buffers = 263168000
Swap:total50/free1073821804
Number of processes = 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;
}
相关文章推荐
- linux sysinfo函数使用方法--获取内存大小
- 安卓获取手机内存,SD卡内存使用状态的方法
- 写出方法获取ios内存使用情况
- 获取手机内存大小的方法
- [转]几种获取Android系统内存使用状况的方法
- 使用CCSpriteFrame创建CCSprite时,获取CCSprite大小方法
- 无废话Android之android下junit测试框架配置、保存文件到手机内存、android下文件访问的权限、保存文件到SD卡、获取SD卡大小、使用SharedPreferences进行数据存储、使用Pull解析器操作XML文件、android下操作sqlite数据库和事务(2)
- C#获取硬盘编号、CPU编号及类型、内存大小及使用情况
- 怎样使用C语言程序获取Linux系统中未使用的内存大小? http://linux.cn/thread-13774-1-1.html
- 写出方法获取ios内存使用情况
- 获取操作系统CPU及内存使用信息的另一种方法
- C#获取硬盘编号、CPU编号及类型、内存大小及使用情况
- iOS开发--用方法获取内存使用情况
- Android 获取app应用大小、手机内存信息、删除文件方法、获得文件大小
- 使用PowerShell获取当前主机内存使用量和总量的方法
- python在linux系统下获取系统内存使用情况的方法
- 写出方法获取ios内存使用情况。
- 使用Easyui的控件后,val()方法获取不到值的解决方法和比较日期大小的js方法
- 安卓获取机身内存和外部sdCard的方法及存储大小
- Glide 缓存工具例子,缓存大小获取,磁盘缓存清除(2 种方法),内存缓存清除