чтение выходного кода -dvvvv с терминала в программу cpp

Я исполняю «CodeSign -DVV» Команда через попен. который открывает двунаправленный канал к дочернему процессу (дочерний процесс для codeign -dvvvv). когда я пытаюсь прочитать из канала, вывод команды, он читает 0 байтов. следующий код:

\#define MAX_BUF_SIZE 1024
\#define MAX_HASH_SIZE 1024

snprintf(command, MAX_BUF_SIZE,"codesign -dvv %s", file);
hash = (char *) malloc(MAX_HASH_SIZE);

if (NULL == hash) {
return NULL;
}

if (!(hfile = popen(command, "r"))){
return NULL;
}

while (fgets(temp, MAX_BUF_SIZE, hfile)!=NULL);
printf("sign %lu %s \n",strlen(temp),temp);
strcpy(hash,temp);
pclose(hfile);

В выводе я вижу вывод команды codeign, но моя программа не может его прочитать.

0

Решение

Вывод кодового знака находится на stderr, а не на stdout. popen только доступ к стандартному выводу.

Вы должны перенаправить stderr в стандартный вывод вашей команды, например:

snprintf(command, MAX_BUF_SIZE,"codesign -dvv %s 2>&1", file);

Надеюсь, что это позволяет прочитать вывод.

1

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

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