考虑以下两行代码
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/