在 GNU/Linux 世界中使用 C++

在 GNU/Linux 世界中使用 C++

作为一名使用嵌入式系统的 C++ 开发人员,当我经常使用 Linux API 时,很难保持 C++“思维模式”。例如,我可能希望使用 libudev,它使用轮询来监视设备连接/断开连接,使用状态上下文,并且通常使用可以使用 C++ 标准库很好地表达的模式。

stat在执行诸如使用.检查文件是否存在等琐碎任务时,我也经常感觉自己误入了 C 领域。C++17 现在有std::filesystem

我也根本没有时间为我可能想要交互的每个 GNU/Linux 子系统编写 C -> C++ 绑定,只是为了代码清晰和“完整性”。大多数这些用户空间接口是非常至此已经成熟,并且我认为期望 C++ 的绑定存在并得到维护并不算太雄心勃勃。为了正确地看待我之前的案例,Python 甚至有pyudev,它提供了围绕 libudev 的可爱抽象。

我想我的问题是:

在 GNU/Linux 环境中编程时,如何保持 C++ 代码干净且富有表现力(维护 C++ 哲学),而无需为几乎所有内容编写 hacky 绑定?

答案1

通常,人们只使用 C++ 中的 C API。

你可以尝试看看是否有其他人创建了一个更面向对象的C++接口。例如,谷歌搜索“udev C++”的第一个结果是 GitHub 存储库迪米特里-伊申科/udev,这可能会有所帮助(我不能保证)。您还可以使用 C++ D-Bus 实现与 udev 交互,例如sdbus-c++

促进是其他“半标准”C++ 库的主要来源,它可能弥补标准 POSIX 库的 C++ 风格接口中的一些空白。例如,文件系统库在被 C++17 采用之前就已经存在于 Boost 中。增强进程间处理共享内存、mmap 等。升压过程,Boost.Program_options, 和Boost.Asio还涵盖了一些 POSIX 领域。

相关内容