【发布时间】:2014-05-12 09:18:54
【问题描述】:
我正在开发一个交互式命令行工具。该工具显示一个提示,用户可以输入正在处理的命令和参数。执行命令后,会有一个新提示,用户可以继续输入命令。在 cli 模式下使用时,它与 gdb 调试器非常相似。 该工具主要是用 C++ 编写的,带有一些用于使用 C 库的包装器。
我想在我的工具上附加一个 GUI(QT 将是我的首选),但是我不确定如何执行此操作。 如果您在 Internet 上搜索,许多 Unix 开发人员更喜欢严格分离后端和前端。 所以,我正在考虑让 GUI 成为一个单独的可执行文件,它只使用我的命令行工具的功能。
实现这一目标的最佳方法是什么? 我应该使用管道或套接字的进程间通信吗? 例如,gdb 使用 TCP/IP,甚至允许在与服务器不同的机器上运行 GUI! (但是,此功能不是必需的)。
如果使用某种 IPC,通信应该如何工作?我应该使用 ASCII 接口吗(Unix 编程的艺术更喜欢这个)?这样做的好处是我的 GUI 只需要解析我的命令行工具的输出。我不必对我的工具进行太多更改,因为如果该工具写入套接字/管道或只是写入 cout 并没有太大区别。 如果是这样,我应该为 IPC 定义一个协议还是只解析输入/输出?
另一种方法是将 GUI 直接集成到我的工具中,从而只生成一个可执行文件。 Insight 调试器就是这样做的。 Insight 不仅“使用”gdb,它的程序代码中还有自己的 gdb。 这样我就不必编写解析器了,我的 GUI 代码可以从我的“基本代码”中调用函数。
或者我应该让我的命令行工具成为一个库,我可以将它与 cli 或 GUI 前端链接?
解决我的问题的最佳方法是什么? 上述解决方案的优点/缺点是什么? 你喜欢什么?
【问题讨论】:
-
“或者我应该让我的命令行工具成为一个库,我可以将它与 cli 或 GUI 前端链接?”是的 - 这将表现得更好,避免潜在的缓慢和/或内存消耗的序列化和反序列化,类型安全并避免大量编码。
标签: c++ user-interface ipc