|
http://www./html/200903/20/20090320124328.htm Linux中,sysinfo是用來獲取系統(tǒng)相關(guān)信息的結(jié)構(gòu)體。 函數(shù)聲明和原型: #include <sys/sysinfo.h> int sysinfo(struct sysinfo *info); 結(jié)構(gòu)體信息: 在Linux 2.3.16中,結(jié)構(gòu)體的信息是(單位是字節(jié)): struct sysinfo { long uptime; /* 啟動(dòng)到現(xiàn)在經(jīng)過的時(shí)間 */ unsigned long loads[3]; /* 1, 5, and 15 minute load averages */ unsigned long totalram; /* 總的可用的內(nèi)存大小 */ unsigned long freeram; /* 還未被使用的內(nèi)存大小 */ unsigned long sharedram; /* 共享的存儲(chǔ)器的大小 */ unsigned long bufferram; /* 緩沖區(qū)大小 */ unsigned long totalswap; /* 交換區(qū)大小 */ unsigned long freeswap; /* 還可用的交換區(qū)大小 */ unsigned short procs; /* 當(dāng)前進(jìn)程數(shù)目 */ char _f[22]; /* 64字節(jié)的補(bǔ)丁結(jié)構(gòu) */ }; 在Linux 2.3.23(i386), 2.3.48 (all architectures)中,結(jié)構(gòu)體的信息是(單位是mem_unit字節(jié)): struct sysinfo { long uptime; /* 啟動(dòng)到現(xiàn)在經(jīng)過的時(shí)間 */ unsigned long loads[3]; /* 1, 5, and 15 minute load averages */ unsigned long totalram; /* 總的可用的內(nèi)存大小 單位:mem_unit*/ unsigned long freeram; /* 還未被使用的內(nèi)存大小 單位:mem_unit*/ unsigned long sharedram; /* 共享的存儲(chǔ)器的大小*/
unsigned long bufferram; /* 共享的存儲(chǔ)器的大小 */ unsigned long totalswap; /* 交換區(qū)大小 */ unsigned long freeswap; /* 還可用的交換區(qū)大小 */ unsigned short procs; /* 當(dāng)前進(jìn)程數(shù)目 */ unsigned long totalhigh; /* 總的高內(nèi)存大小 */ unsigned long freehigh; /* 可用的高內(nèi)存大小 */ unsigned int mem_unit; /* 以字節(jié)為單位的內(nèi)存大小 */ char _f[20-2*sizeof(long)-sizeof(int)]; /* libc5的補(bǔ)丁 }; 返回值: 操作成功返回0,錯(cuò)誤返回-1; 樣例: #include <stdio.h> #include <linux/unistd.h> /* 包含調(diào)用 _syscallX 宏等相關(guān)信息*/ #include <linux/kernel.h> /* 包含sysinfo結(jié)構(gòu)體信息*/ _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; } /*輸出結(jié)果: /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> /* 包含調(diào)用 _syscallX 宏等相關(guān)信息*/ #include <linux/kernel.h> /* 包含sysinfo結(jié)構(gòu)體信息*/ #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; } |
|
|