如何使用c程序从QNX获取内存信息?

时间:2015-07-28 07:14:21

标签: c ubuntu qnx

我编写了一个完全适用于Ubuntu的代码。但在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

2 个答案:

答案 0 :(得分:0)

关于_SC_PHYS_PAGES_SC_AVPHYS_PAGES QNX doco page for sysconf,我看不到任何内容,但确实有注释:

  

请求的可配置系统限制。如果没有为系统定义name,则返回-1。

因此,QNX实际上无法提供该信息。

您可以直接打印sysconf(oneOfThoseTwo)并查看是否获得-1来验证这一点。

如果你得到一个合适的值,那么它可能与算术溢出有关,在这种情况下你可以重构你的计算以避免它:

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

答案 1 :(得分:-1)

经过大量时间的投入,我有办法实现这一目标。

使用:

Showmem -S

要从c编程语言执行此命令,请使用管道

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

然后你可以从fp中获取数据。