如何使用 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中抓取数据了
我写了一个在 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中抓取数据了