如何使用c程序从QNX获取内存信息?
我已经写了一个代码,它在Ubuntu上完美地工作。但是在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
#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");