gpt4 book ai didi

c - 用于控制系统服务的简单 C 或 C++ API

转载 作者:IT王子 更新时间:2023-10-29 01:15:28 30 4
gpt4 key购买 nike

目标

我想编写 C/C++ 应用程序并为它们提供 API 以直接与 systemd 管理的服务通信。实际上,我希望我的应用程序能够执行与 systemctl start service_name@unit_number.service 相同的操作,而无需使用 system()popen(),或 exec() 调用(硬性要求)。


问题

假设 systemd 版本为 219(即 CentOS v7.4,也是硬性要求)?


到目前为止的工作

  1. 我在网上搜索了使用 C/C++ 和 found the odd discussion on the topic 控制 systemd 管理服务的示例, 但还没有找到任何好的例子。
  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,您会感到有些痛苦。”。

硬性要求

  • systemd v219.
  • CentOS v7.4
  • C/C++。
  • 没有 system()/popen()/exec() 调用 systemctl CLI 实用程序。
  • 非传播许可证(即 LGPLv2 可以,但首选 BSD/MIT)。

问题(Redux)

有没有我可以在 CentOS v7.4 上使用的更简单的 API(即使我必须自己提供共享库)可以用来以简单、可靠的方式与 systemd 通信直接通过 C/C++ 代码? 如果现有的 libdbus-1.so API 很复杂但仍然可靠,并且我可以围绕它创建一个可靠/稳定的包装器库,我愿意探索该选项。 此外,如果可以独立于 systemd 手动构建和部署 SD-BUS 组件并使用它们而无需修改/升级已经在系统,我也有可能走那条路。


编辑和评论

  • 我愿意使用成熟的 C++ 库,只要它不需要完全发布所有源代码即可。

谢谢。

最佳答案

如您所知,您应该只使用 dbus 库与 systemd 交互,没有其他受支持的方法可以这样做。即使您取消了不执行二进制文件的要求,它仍然会被反对,因为 *ctl 工具是命令行用户界面,并非旨在或设计为从其他程序调用。

关于c - 用于控制系统服务的简单 C 或 C++ API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50780221/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com