重定向 C system() 输出仅在 yq 时失败

Redirecting C system() output fails only with yq

我正在使用 yq 将 YAML 文档转换为 JSON 以便在 C 程序中使用。在我的程序中,我使用命令

将文件转换为 JSON
system("yq ea \'[.]\' -o=json .cache/BT_nginx-ingress.yaml > .cache/package.json")

但是这会导致错误:

Error: write /dev/stdout: permission denied

在我的程序中,我多次使用 system() 命令进行重定向,但在这个特定实例中它失败了。

我可以 运行 从终端正常执行命令,无需 root。我在 PopOS 上使用 bash,所以我还在上面的 system() 调用中添加了 bash -c,但这种方式也失败了。

谁能帮我解决这个问题?谢谢!

编辑:关于我的配置的更多细节。当前工作目录与程序的位置相同,是.cache 之上的一个目录。工作目录永远不会改变。我是 .cache 和其中文件的所有者。对我和小组来说,权限是 r/w。我正在 运行 处理这个过程,但没有使用 sudo。 system("echo foo > .cache/package.json") 有效!

我已经设法通过将 yq_linux_amd64 二进制文件添加到 C 程序本身来解决这个问题,而不是使用 snap 中的 yq 包。它现在工作正常,并且可以毫无问题地重定向输出。