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

How to get Memory information from QNX using c program?

我写了一个在 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

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

The requested configurable system limit. If name isn't defined for the system, -1 is returned.

因此,QNX 可能实际上并未提供该信息。

您可以通过直接打印 sysconf(oneOfThoseTwo) 并查看是否得到 -1.

来验证这一点

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

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

在投入大量时间后,我找到了一个可以做到的方法。

使用:

Showmem -S

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

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

然后就可以从fp中抓取数据了