[英]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.