while(fgets(BUF, sizeof(BUF), INFO_PC)){
puts(BUF);
}
Этот цикл
построчно вычитывает выхлоп от `popen(...)`. Не удивительно, что в BUF остается лишь одна
последняя строка.
И еще вижу возможную утечку в случае ошибки popen(...): `char BUF[512]` ничем не инициализирован и все, что лежит на стеке может улететь в desktop.cfg.