功能說明:取得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裡的內容非常類似....
沒有留言:
張貼留言