功能說明:取得Linux系統的一些訊息。
標頭檔:#include <sys/sysinfo.h>
函式宣告:int sysinfo(struct sysinfo *info);
函式說明:
1. sysinfo()所傳進去的參數是一個struct sysinfo的結構指標;struct sysinfo結構的內容如範例所示。要使用這個函數時有些限制:Linux版本至少為2.3.23 (i386),或者是2.3.48 (x64)。
2. 那struct sysinfo的結構內容為何?? 當我們查詢:/ usr / include / sys / sysinfo.h,發現它定義在:/ usr / include / linux / kernel.h:
struct sysinfo {
long uptime; // Seconds since boot
unsigned long loads[3]; // 1, 5, and 15 minute load averages
unsigned long totalram; // Total usable main memory size
unsigned long freeram; // Available memory size
unsigned long sharedram; // Amount of shared memory
unsigned long bufferram; // Memory used by buffers
unsigned long totalswap; // Total swap space size
unsigned long freeswap; // swap space still available
unsigned short procs; // Number of current processes
unsigned short pad; // explicit padding for m68k
unsigned long totalhigh; // Total high memory size
unsigned long freehigh; // Available high memory size
unsigned int mem_unit; // Memory unit size in bytes
char _f[20 - 2 * sizeof(long) - sizeof(int)]; // Padding: libc5 uses this...
};
回傳值:執行成功返回0,失敗返回-1;errno被設定為EFAULT。範例:
#include <stdio.h>
#include <string.h>
#include <sys/sysinfo.h>
#include <stdlib.h>
int main(int argc, char *argv[], char **envp)
{
struct sysinfo stSysinfo;
int error = 2;
memset(&stSysinfo, 0, sizeof(struct sysinfo));
error = sysinfo(&stSysinfo);
if (error == -1) {
perror("sysinfo");
printf("strerror(%d): %s \n", errno, strerror(errno));
exit(1);
}
printf("stSysinfo.uptime: %ld \n", stSysinfo.uptime);
printf("stSysinfo.loads[0]: %lu \n", stSysinfo.loads[0]);
printf("stSysinfo.loads[1]: %lu \n", stSysinfo.loads[1]);
printf("stSysinfo.loads[2]: %lu \n", stSysinfo.loads[2]);
printf("stSysinfo.totalram: %lu \n", stSysinfo.totalram);
printf("stSysinfo.freeram: %lu \n", stSysinfo.freeram);
printf("stSysinfo.sharedram: %lu \n", stSysinfo.sharedram);
printf("stSysinfo.bufferram: %lu \n", stSysinfo.bufferram);
printf("stSysinfo.totalswap: %lu \n", stSysinfo.totalswap);
printf("stSysinfo.freeswap: %lu \n", stSysinfo.freeswap);
printf("stSysinfo.procs: %u \n", stSysinfo.procs);
printf("stSysinfo.pad: %u \n", stSysinfo.procs);
printf("stSysinfo.totalhigh: %lu \n", stSysinfo.totalhigh);
printf("stSysinfo.freehigh: %lu \n", stSysinfo.freehigh);
printf("stSysinfo.mem_unit: %u \n", stSysinfo.mem_unit);
printf("stSysinfo._f[%d]: %s \n ", 20 - 2 * sizeof(long) - sizeof(int), stSysinfo._f[20 - 2 * sizeof(long) - sizeof(int)]);
return 0;
}
執行結果:仔細看,它跟cat -n / proc / meminfo | less裡的內容非常類似....
沒有留言:
張貼留言