Как получить информацию о памяти из 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)
Другие вопросы по тегам