C++ 如何判断popen()是否成功?

C++ 如何判断popen()是否成功?,c++,c,shell,popen,C++,C,Shell,Popen,您如何知道运行shell成功/完成了还是失败了?假设您的意思是在C代码中运行popen,您可以查看手册页。它说如果失败,popen将返回NULL,否则返回文件流。: 成功完成后,popen()将返回指向打开的 可用于读取或写入管道的流。否则, 应返回空指针,并可设置errno以指示错误 公认的答案并不是真正确定的 例如,要求popen()执行无效的命令或图像只会返回一个有效的文件指针(无需读取)。同时,shell产生的错误消息被重定向到父级的stderr popen()在无法生成shell时确实

您如何知道运行shell成功/完成了还是失败了?

假设您的意思是在C代码中运行popen,您可以查看手册页。它说如果失败,popen将返回NULL,否则返回文件流。

:

成功完成后,popen()将返回指向打开的 可用于读取或写入管道的流。否则, 应返回空指针,并可设置errno以指示错误


公认的答案并不是真正确定的

例如,要求
popen()
执行无效的命令或图像只会返回一个有效的文件指针(无需读取)。同时,shell产生的错误消息被重定向到父级的
stderr


popen()
在无法生成shell时确实会返回NULL,这在常见情况下是一种不寻常的情况。

什么是“运行shell?”您是否查看了popen手册页?文档。。。成功完成后,popen()将返回一个指向可用于读取或写入管道的开放流的指针。否则,它将返回一个空指针,并可能设置errno以指示错误“检查@user1104856,‘success’对您意味着什么?”?我可以看到三种情况:(1)程序完全成功运行,成功退出状态为
0
,或(2)
cat不存在\u文件
,或(3)更严重的故障,popen甚至无法调用fork或pipe。谢谢!正是我需要知道的:这正是通过阅读手册页
man-popen
可以找到的。在询问此问题之前,请先检查本地文档,这样将来您(和我们其他人)将节省大量时间。请记住,shell运行的命令可能会失败,可能是试图
cat
一个不存在的文件。在这种情况下,
popen
是成功的。您需要使用
pclose
从shell获取返回值。@Keith Thompson我这样做了,但您是对的。@Aaron McDaid我正在这样做:status=pclose(fp);:)@AaronMcDaid-如果我需要在关闭流之前检查shell的返回代码,我该怎么做?
fp = popen("ls *", "r");
if (fp == NULL)
    /* Handle error */;