C++ 在 Linux 中运行 traceroute。 popen 不返回整个输出

问题描述 投票:0回答:0

我想在 Linux 上从 C++ 执行

tcptraceroute
命令。

我找到了一个问题/答案(见下文)。但是,它只返回前几行:

Selected device epo3, address 192.168.1.2, port 45000 for outgoing packets
Tracing the path to 199.36.213.11 on TCP port 80 (http), 30 hops max

tcptraceroute <address>
在进行网络跳跃时在一段时间内写入标准输出。

我认为这是可能的,因为我在 Python 中使用 AWS Boto3 做了类似的事情

send_command()
.

我试过的答案:

https://stackoverflow.com/a/478960

std::string exec(const char* cmd) {
    char buffer[128];
    std::string result = "";
    FILE* pipe = popen(cmd, "r");
    if (!pipe) throw std::runtime_error("popen() failed!");
    try {
        while (fgets(buffer, sizeof buffer, pipe) != NULL) {
            result += buffer;
        }
    } catch (...) {
        pclose(pipe);
        throw;
    }
    pclose(pipe);
    return result;
}
c++ linux process posix system
© www.soinside.com 2019 - 2024. All rights reserved.