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;
}