c++ - 如何检查应用程序是否在 OpenOnload 下运行?

标签 c++ linux networking system openonload

我需要检查我的应用程序是否通过在 OpenOnload 下运行来加速。限制是不能使用 Onload 特定 API - 应用程序未与 Onload 扩展库链接。

如何做到这一点?

最佳答案

OpenOnload 可以通过预加载的共享库存在 libonload.so 来检测。

在这种情况下,您的应用程序环境将包含 LD_PRELOAD=libonload.so 字符串。

或者您可以枚举所有加载的共享库并检查 libonload.so

#include <string>
#include <fstream>
#include <iostream>

// Checks is specific SO loaded in current process.
bool is_so_loaded(const std::string& so_name)
{
    const std::string proc_path = "/proc/self/maps";
    std::ifstream proc(proc_path);

    std::string str;
    while (std::getline(proc, str))
    {
        if (str.find(so_name) != std::string::npos) return true;
    }

    return false;
}

int main()
{
    std::cout
        << "Running with OpenOnload: "
        << (is_so_loaded("/libonload.so") ? "Yes" : "No")
        << std::endl;
    return 0;
}

关于c++ - 如何检查应用程序是否在 OpenOnload 下运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41651843/

相关文章:

Linux shell 脚本赋值

ios - 如何在不使用GKPeerPickerController的情况下建立对等连接?

c++ - 插入排序 > 通过引用传递的数组中不可变值的问题

linux - 为什么在 Linux 中做 I/O 是不间断的?

c++ - 链接器会将哪些符号放入可执行 ELF 中?

c++ - 连接到外部 IP 失败

c++ - QWebSocket Hello World示例

c++ - 在 C++ 中将米转换为英尺和英寸时遇到问题

c++ - 将 list 文件移动到 dll?

c++ - Qt 事件或 repaint() 函数不工作