Пожалуйста, измените
FILE *cmdline = popen(command, "rb");
к
FILE *cmdline = popen(command, "r");
и она работает (я тестировал - http://ideone.com/agV18s).
От http://pubs.opengroup.org/onlinepubs/009696899/functions/popen.html
Режим аргумента в POPEN() является строкой, которая определяет режим ввода/вывода:
Если режим г, при запуске дочернего процесса, его файл дескриптора STDOUT_FILENO должен быть записываемый конец трубы, а файл дескриптор fileno (поток) в вызывающем процессе, где поток представляет собой указатель потока , возвращенный popen(), должен быть читаемым концом трубы .
Если режим ж, когда дочерний процесс запускается его дескриптор файла STDIN_FILENO должен быть читаемым конец трубы, а файл дескриптор fileno (поток) в процессе вызова, где поток является указателем поток возвращенный popen(), должен быть записываемым концом трубы .
Если режим - любое другое значение, результат не определен.
Кажется, вы используете режим b
, вызывающий проблему (или получение неопределенного поведения).
Также убедитесь, что все ваши указатели, чтобы избежать утечек памяти.
Также обратите внимание, что каждая итерация runSysCall
перезапишет output
. Таким образом, в вашем getVendorOfTheProcesses
, когда вы печатаете result
, вы получите null
, так как это последнее, что нужно прочитать. Поэтому вам нужно убедиться, что вы добавляете каждую строку и возвращаете ее до runSysCall
вместо result
.
Я немного изменил свой код, чтобы включить то, что я имею в виду - http://ideone.com/QVTjiD Это просто пример, вы должны адаптировать его для своих нужд и включить управление памятью.
Чтобы убедиться, что код работает нормально (на моей машине граф был 128, вашим может отличаться), вы можете использовать что-то, как показано ниже:
$ cat /proc/cpuinfo | grep -i 'Model' | wc -l
128
$ ./a.out | wc -l
128
Надеется, что это помогает.
Вероятно, вы имеете в виду 'getdelim (output, & size, 0, cmdline)'. Обязательно включите все предупреждения компилятора. –
@KerrekSB - Да и нет: 'getdelim' нуждается в' char ** 'в качестве первого параметра. но 'output' - это только' char * '. – Roddy