Как получить информацию о памяти из QNX с помощью программы c?
Я написал код, который отлично работает на 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
2 ответа
Потратив много времени, я нашел способ сделать это.
С помощью:
Showmem -S
Для выполнения этой команды из языка программирования c используйте pipe
FILE *fp;
pf = popen(command,"r");
Затем вы можете получить данные из фп.
Я ничего не вижу на странице документации QNX для sysconf
о любом _SC_PHYS_PAGES
ни _SC_AVPHYS_PAGES
но у него есть примечание:
Запрашиваемый настраиваемый системный лимит. Если имя не определено для системы, возвращается -1.
Таким образом, возможно, что эта информация на самом деле не доступна QNX.
Вы можете проверить это, распечатав sysconf(oneOfThoseTwo)
прямо и посмотреть, если вы получите -1
,
Если вы получите приличное значение, то это может быть связано с арифметическим переполнением, и в этом случае вы можете реструктурировать свой расчет, чтобы избежать его:
#define MEG 1048576
(sysconf(oneOfThoseTwo) + MEG - 1) / MEG) * sysconf(_SC_PAGESIZE)