c++ - 将终端的 codesign -dvvvv 输出读取到 cpp 程序中

标签 c++ macos codesign

我正在通过 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/

相关文章:

c++ - 这个声明如何调用最令人烦恼的解析?

cocoa - 二进制 plist 中的格式化文本编码

macos - 为什么我的 mac lldb 生成 lldb 本身无法识别的核心文件?

ios - 从命令行代码设计 ios 应用程序

c++ - 在新线程中调用方法并将返回值分配给变量

c++ - 使用括号运算符实现矩阵类的安全方法

c++ - 将 gsl::zstring_view 与 C API 结合使用

iphone - 异常代码 : KERN_PROTECTION_FAILURE at 0x00000000 Error

macos - codesign 在哪里存储 OSX 上已签名文本文件的签名?

macos - 使用 Apple 的 Catalyst 转换为 Mac 时出现问题