将终端输出的codesign-dvvv读取到cpp程序中

reading codesign -dvvvv output from terminal into a cpp program

本文关键字:cpp 程序 读取 codesign-dvvv 终端 输出      更新时间:2023-10-16

我正在通过popen执行"codesign-dvv"命令。它打开了一个通向子进程(代码设计的子进程-dvvv)的双向管道。当我尝试从管道读取命令的输出时,它读取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只访问stdout。

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

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

希望这能让你阅读输出。