Я хотел бы написать основной сервер обрабатывает запрос пользователя (в оболочке, как среда) и загружать динамические библиотеки выполняет ioctls и некоторые debugfs. Главный сервер находится на c ++, а загружаемые библиотеки написаны на c. Это хороший дизайн?
Как насчет сценария оболочки, загружающего библиотеки и обрабатывающего запрос, возможно ли это вообще?
C ++ разработан с учетом совместимости с C, поэтому вполне нормально использовать библиотеки, написанные на C, из программы, написанной на C ++. Язык даже предоставляет синтаксис для использования заголовков C с C ++, поэтому то, что вы пытаетесь сделать, определенно возможно.
В некоторых случаях это не может быть идеальным с точки зрения читабельности, потому что код C может использовать непрозрачные дескрипторы для эмуляции объектов: это идиоматично для C, но не для C ++. Тем не менее, эта проблема может быть легко решена путем написания оболочки C ++ вокруг библиотеки C с минимальными издержками.
Конструкция, в которой программа или ее часть написана на C ++, но взаимодействует с загружаемыми модулями на C, не является неслыханной. Это встречается везде, где разработчики хотят использовать возможности C ++ (STL, исключения) для реализация, но хочу сохранить простоту и уникальность C для интерфейс не имея дело, например, с тонкими различиями в том, как компиляторы C ++ реализуют исключения или RTTI. В Unix дополнительная причина заключается в том, что C ++ никогда не поднимался до того же уровня, что и в Windows, поэтому поддержка инструментальных средств по-прежнему лучше для чистого C.
Примером этого могут быть сторонние модули Python, написанные внутри на C ++. Хотя они реализованы в C ++, они взаимодействуют с Python, используя только C, поскольку именно этого ожидает API-интерфейс Python / C. В некоторых случаях эта связь может быть насыщенной — например, исключения C ++ могут быть представлены как исключения Python, и наоборот (Boost.Python делает это автоматически). Инструментарий GTK— позволяет писать виджеты GTK на C ++ и экспортировать их интерфейс как обычные виджеты GTK.