繁体   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