我正在通过 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 命令的输出,但我的程序无法读取它。
最佳答案
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/