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

error status from popen when the command accesses a non existent file

考虑以下两行代码

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

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

如果命令失败,是否有简单的方法使 popen return 为空?

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

没有

决定命令是否成功 运行(即:启动)失败不是 popen() 的任务。如果命令被认为具有 "failed" 完全取决于逻辑应用程序级别上下文,则它是 运行 in/under.

不过,if popen() 没有 return NULL 需要 相关调用到 pclose()。后一个调用的结果告诉您 exit-status 已经被 popen() 变成了 运行。使用这个 exit-status 调用程序可以决定如何解释 popen() 的结果,从成功到失败。