Я исполняю «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, но моя программа не может его прочитать.
Вывод кодового знака находится на stderr, а не на stdout. popen только доступ к стандартному выводу.
Вы должны перенаправить stderr в стандартный вывод вашей команды, например:
snprintf(command, MAX_BUF_SIZE,"codesign -dvv %s 2>&1", file);
Надеюсь, что это позволяет прочитать вывод.
Других решений пока нет …