C ++ Linux system () выводит странно в сочетании с printf ();

Я хочу получить имя процессора и тактовую частоту, в C ++ на Linux. Но пока что это не очень хорошо для меня. Прямо сейчас я использую этот кусок кода:

printf("\033[1;32m[ OK ]\033[0m Initializing...\n");
printf("\033[1m[INFO]\033[0m CPU name: ");
system("grep -i --color 'model name' /proc/cpuinfo | uniq | sed -e 's/model name//' |    sed -e 's/: //' | sed -e 's/          //' | sed -e 's/@.*//'");
printf("\n");
printf("\033[1m[INFO]\033[0m CPU speed: ");
system("grep -i --color 'model name' /proc/cpuinfo | uniq | sed -e 's/.*@//'");
printf("\n");

Теперь желаемый результат должен быть (на моей машине) примерно таким:

[ OK ] Initializing...
[INFO] CPU name: Intel(R) Xeon(R) CPU X5365
[INFO] CPU speed: 3.00GHz

Но это не то, что он дает мне. Это дает эту странную структуру:

[ OK ] Initializing...
Intel(R) Xeon(R) CPU X5365
[INFO] CPU name:
3.00GHz
[INFO] CPU speed:

Кто-нибудь знает, что с этим делать? Tnx в любом случае.

1

Решение

Вам нужно очистить выходной поток перед вызовом systemв противном случае распечатанная строка может быть помещена в буфер. Печать \n приливы (при условии stdout является буферизованной строкой, что обычно происходит, если вы пишете в терминал), но печать строки без нее не обязательно сбрасывается.

Попробуйте добавить:

fflush(stdout);

до вашего system звонки.

(fflush в <cstdio>.)

6

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector