我正在试图弄清楚如何检测 popen 调用的命令何时失败。在下面的程序test.c
中,尽管命令失败, popen 仍返回非null。有线索吗?
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
FILE *fp;
int status;
fp = popen("foo", "r");
if (fp != NULL) {
puts("command successful");
status = pclose(fp);
if (status < 0) {
perror(NULL);
exit(EXIT_FAILURE);
}
} else {
perror(NULL);
exit(EXIT_FAILURE);
}
return 0;
}
输出:
$ ./test
command successful
sh: 1: foo: not found
答案 0 :(得分:2)
据我了解man page,pclose
应返回退出代码。您正在此处测试&lt; 0,如果pclose
本身失败,则为真。然后,测试&gt; 0将测试被叫程序是否失败(退出代码&gt; 0)。
pclose
的手册页:
pclose()函数等待关联的进程终止,并返回wait4返回的命令的退出状态。
和
如果wait4返回错误,或者检测到其他错误,则pclose()函数返回-1。