2015-07-28 64 views
1

我寫了一個在Ubuntu上完美工作的代碼。但在QNX上獲得意想不到的行爲。如何使用c程序從QNX獲取內存信息?

#include <stdio.h> 
#include <stdlib.h> 
#include <limits.h> 
#include <unistd.h> 

int main(void) 
    { 

    printf("Total Memory = %ld MB\n", 
    (sysconf(_SC_PHYS_PAGES)* sysconf(_SC_PAGESIZE))/1048576); 

    printf("Getting available memory...\n"); 
    printf("Available  = %ld MB\n", 
    (sysconf(_SC_AVPHYS_PAGES)* sysconf(_SC_PAGESIZE))/1048576); 

    printf("Getting used memory...\n"); 
    printf("Used Memory = %ld MB\n",((sysconf(_SC_PHYS_PAGES) - 
    sysconf(_SC_AVPHYS_PAGES))* sysconf(_SC_PAGESIZE))/1048576); 

    return EXIT_SUCCESS; 
} 

這在Ubuntu上可以很好地工作,但不能在QNX上工作。 有沒有什麼不同的方式來做到這一點?

輸出:

 Total Memory = - 3906 MB 

    Available = - 3096 MB 

    Used Memory = 0 MB 
+0

什麼意外的行爲?添加問題描述。 – LPs

+0

@ Lps更新。 3906實際上是頁面大小。 –

+0

@sourav戈什不確定。 –

回答

-1

投入的時間很多,我得到一個後我可以做到這一點。

使用:

Showmem -S 

從C編程語言使用管道

FILE *fp; 
pf = popen(command,"r"); 

執行這個命令,那麼可以從FP獲取數據。

0

我看到在QNX doco page for sysconf約要麼_SC_PHYS_PAGES也不_SC_AVPHYS_PAGES什麼,但它確實有注:

請求配置的系統限制。如果沒有爲系統定義名稱,則返回-1。

因此,有可能QNX並未實際提供該信息。

您可以通過直接打印sysconf(oneOfThoseTwo)並查看是否得到-1來驗證此問題。

如果得到一個體面的價值則可能以算術溢出有關,在這種情況下,你可以調整你的計算,以避免它:

#define MEG 1048576 
(sysconf(oneOfThoseTwo) + MEG - 1)/MEG) * sysconf(_SC_PAGESIZE)