我正在通过popen执行“ codesign -dvv”命令。这将打开通往子进程(codesign -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);


在输出中,我可以看到codesign命令的输出,但是我的程序无法读取它。

最佳答案

代码输出在stderr上,而不在stdout上。 popen只访问标准输出。

您应该在命令中将stderr重定向到stdout,例如:

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


希望这可以让您阅读输出。

关于c++ - 从终端读取codesign -dvvvv输出到cpp程序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38783318/

10-10 13:43
查看更多