[英]Getting blocked while trying to execute a command on Linux using c++
我试图在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。
有谁能够帮助我?
该代码应该可以工作,但是我改用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个字节的行中的数据。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.