如何使用c程序从QNX获取内存信息?
问题描述:
我写了一个在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
答
投入的时间很多,我得到一个后我可以做到这一点。
使用:
Showmem -S
从C编程语言使用管道
FILE *fp;
pf = popen(command,"r");
执行这个命令,那么可以从FP获取数据。
答
我看到在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)
什么意外的行为?添加问题描述。 – LPs
@ Lps更新。 3906实际上是页面大小。 –
@sourav戈什不确定。 –