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

如何使用c程序从QNX获取内存信息?,c,ubuntu,qnx,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_PA

我已经写了一个代码,它在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;
}
我看不到关于SCU物理页面和AVPHYS页面的任何内容,但它确实有注释:

请求的可配置系统限制。如果未为系统定义名称,则返回-1

所以,有可能QNX并没有提供这些信息

您可以通过直接打印sysconfoneOfThoseTwo并查看是否得到-1来验证这一点

如果您确实返回了一个合适的值,那么它可能与算术溢出有关,在这种情况下,您可以重新构造计算以避免它:

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

在花了很多时间之后,我找到了一种方法

使用:

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

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

然后您可以从fp获取数据。

什么意外行为?添加问题的说明。@Lps已更新。3906实际上是页面大小。@sourav Ghosh不确定。
FILE *fp;
pf = popen(command,"r");