popen获取nginx版本失败

九九歌神 2015-08-27 08:49:04
使用popen执行nginx -v 来获得nginx的版本,然而每次版本信息都输出在屏幕上,popen无法获取信息
代码如下:
bool Exec(const std::string & cmd , std::string & output)
{
output.clear();
signal(SIGCHLD, SIG_IGN);
fflush(stdout);
FILE* stream = NULL;
char buf[1024];
stream = popen(cmd.c_str(),"r");
if (stream != NULL)
{
while (!feof(stream))
{
memset(buf,0,1024);
if(fgets(buf,1024,stream) != NULL)
{
output.append(buf);
}
}
}
if(output.find("command not found")!=std::string::npos)
{
output.clear();
}
if (stream != NULL)
{
pclose(stream);
}
return 1;
}


直接使用 /bin/sh -c "nginx路径 -v"在终端也可以获取版本信息
请各位前辈指点。
...全文
108 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
九九歌神 2015-08-28
  • 打赏
  • 举报
回复
问题解决了,nginx在执行-v 命令时会把结果输出到stderr而不是stdout 只需要把stderr重定向到stdout就可以了
九九歌神 2015-08-27
  • 打赏
  • 举报
回复
哪位大神帮忙看下啊
九九歌神 2015-08-27
  • 打赏
  • 举报
回复
使用这个函数执行诸如 ps/ls之类的命令可以正确获得输出,只有nginx -v没有办法

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧