linux sysinfo函數使用方法--擷取記憶體大小

來源:互聯網
上載者:User

 

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.