我正在尝试在linux上运行命令并检索输出,我发现了一些代码,但是当我运行它时,我得到第一行然后线程被阻塞。这是代码:
std::string exec_cmd(char const* cmd)
{
std::string result, file;
FILE* pipe {popen(cmd, "r")};
char buffer[256];
while(fgets(buffer, sizeof(buffer), pipe) != nullptr)
{
file = buffer;
result += file.substr(0, file.size() - 1);
}
pclose(pipe);
return result;
}
例如,如果我正在运行命令uname -a
,我会出局,但fgets
等待数据并且执行卡在那里。
我正在使用JNI。
任何人都可以帮助我吗?
答案 0 :(得分:1)
代码应该有效,但我会改用pstream.h
标题:
std::string exec_cmd(char const* cmd)
{
redi::ipstream p(cmd);
std::ostringstream result;
result << p.rdbuf();
return result.str();
}
或者,如果实际需要原始代码的换行 - 剥离行为:
std::string exec_cmd(char const* cmd)
{
redi::ipstream p(cmd);
std::string result, line;
while (std::getline(p, line))
result += line;
return result;
}
这样只会删除换行符,而不会丢失长度超过256字节的数据。