c - 当命令访问不存在的文件时来自 popen 的错误状态

标签 c popen exit-code

考虑以下两行代码

sprintf(comm, "cat %s.bz2 | bunzip2 -dc", string);  
fp = popen(comm, "r");

如果我正在打开一个文件但该文件不存在,我只会得到一个 NULL 文件。但是,如果我使用 popen 通过 bunzip2 传输文件,如果底层文件不存在或已损坏,则 fp 将具有一个有效的指针而不是 NULL。显而易见的检查方法似乎是检查 popen 运行的命令的退出状态,但这似乎不可能。

有没有一种简单的方法可以让 popen 在命令失败时返回 null?

最佳答案

is there an easy way to make popen return null if a command fails?

没有。

这不是 popen()决定它成功运行(即:启动)的命令是否失败的任务。一个命令是否被视为“失败”完全取决于它在其中/下运行的逻辑应用程序级上下文。

不过,如果 popen() 没有返回NULL需要pclose() 的相关调用.后一个调用的结果告诉您 popen() 运行的退出状态。使用此退出状态,调用程序可以决定如何解释 popen() 的结果,从成功到失败。

关于c - 当命令访问不存在的文件时来自 popen 的错误状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57124967/

相关文章:

无法在 x86_64 上使用 __objc_msg_forward

c - 工作队列启动、中断和从未完成导致 CPU 停顿

c - C 中一个枚举最多可以包含多少个元素?

python - 使用 Popen.communicate 时如何将警告与 stderr 中发现的错误分开?

python - 为什么此代码在 Python3.1 中的行为与在 Python2.6 中的行为不同?

python - 如何让 Python 的 subprocess() 与 input() 交互?

.net - VB.NET 控制台应用程序中的关闭函数

ios - 为 arm64 和 32 位架构编译时的基础类型

installshield - 安装Shield,如何检查退出代码但不显示错误?

zsh - 自定义 zsh 在显示上一个命令退出代码时的提示