簡體   English   中英

嘗試使用C ++在Linux上執行命令時被阻塞

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM