代码之家  ›  专栏  ›  技术社区  ›  Cloud

用于控制系统服务的简单非CLI(即C/C++)API

  •  5
  • Cloud  · 技术社区  · 7 年前

    目标

    我想编写C/C++应用程序,并提供一个API来直接与它们进行通信。 systemd -托管服务。实际上,我希望我的应用程序能够 systemctl start service_name@unit_number.service 不使用 system() , popen() exec() 呼叫( 硬性要求 )


    问题

    有没有 简单的 C/C++与API通信 系统D ,假设 系统D 219版(即CentOS V7.4, 这也是一项艰巨的要求 )?


    迄今为止的工作

    1. 我在网上搜索过控制的例子 系统D C/C++中的托管服务 found the odd discussion on the topic 但是没有找到任何好的例子。
    2. 我可以一直逆向工程 systemctl version 219 from source 但我可能会违反GPL许可。
    3. Since I'm stuck with CentOS v7.4, which means I can't get at version 221 or later of systemd, I can't use the newer "SD Bus" API. Nobody would allow manually upgrading libsystemd just for an application-specific benefit, and I'm apparently not the first person to raise this concern.
    4. I'm hesitant to use the low-level C API for DBUS 因为维护者自己声明 如果您直接使用这个低级别的API,那么就意味着注册时会有一些麻烦。 “。

    硬性要求

    • 系统D V219。
    • Centos 7.4版
    • C/C++。
    • 系统() / 波本() / 执行() 呼叫 系统控制 CLI实用程序。
    • 非传播许可证(即lgplv2是可以的,但最好是bsd/mit)。

    问题(redux)

    在CentOS V7.4上是否有一个更简单的API(即使我必须自己提供共享库),可用于与 系统D 以简单、可靠的方式直接通过C/C++代码? 如果存在 libdbus-1.so API很复杂,但仍然可靠,我可以围绕它创建一个可靠/稳定的包装库,我愿意探索这个选项。 此外,如果可以手动构建和部署独立于 系统D 使用它们而不必修改/升级 系统D 库/守护进程已经在系统上,我也可能走那个路线。


    编辑和评论

    • 我将开放使用成熟的C++库,只要它不需要完全释放所有源。

    2 回复  |  直到 7 年前
        1
  •  5
  •   Philip Withnall    7 年前

    由于StaseDAPI被暴露为一组D总线接口,所以这个问题本质上归结为什么:C/C++总线绑定是什么?__ this existing answer 以及他们的利弊。

        2
  •  2
  •   Cristian Rodríguez    7 年前

    正如您已经发现的那样,您应该只使用DBUS库与SystemD进行交互,没有其他支持的方法可以这样做。 即使您取消了不执行二进制文件的要求,它仍将不受欢迎,因为*ctl工具是命令行。 用户界面 不打算或设计成从其他程序调用。