2

我有一个在 Debian (Stretch) 下运行的用 C 语言编写的多线程应用程序。其中一个线程是一个简单的控制台,它支持多个命令来控制应用程序。通常,此应用程序会在系统启动并在后台运行且控制台线程禁用时自动启动。

我正在寻找一种远程“连接”到应用程序的方法,以便我可以使用控制台。连接可以是直接使用端口,或者我可以通过 ssh 连接到盒子,然后连接到应用程序。

在开发过程中,我只是以交互方式运行应用程序,但希望在它已经启动后进行调试。

我认为像 netcat 这样的东西可能会起作用,但它似乎使用 TCP/IP 端口,而控制台线程只是连接到 stdin/stdout。

有没有办法做到这一点?

4

1 回答 1

1

阅读有关 Linux 编程的更多信息,也许是旧的ALP(高级 linux 编程)书(可免费下载)或更新的东西。另请参阅syscalls(2)列表。你想要一些进程间通信

您需要了解有关套接字的更多信息。见套接字(7);您可能会使用 Unix 套接字,请参阅unix(7)(或使用fifo(7)pipe(7)等),甚至 TCP/IP 套接字,请参阅tcp(7)(但请注意来自互联网)。您需要使用一些多路复用系统调用,例如poll(2)。在简单的情况下,您的用户可以只使用telnet连接到您的应用程序(请注意,不涉及加密;因此您需要信任连接,例如在某个内部 LAN 上)。

您可以决定为您的程序添加一些网络界面(然后它会成为一个专门的网络服务器,例如提供一些http://localhost:12345/和类似的 URL)。然后使用一些 HTTP服务器库,例如libonionlibhttp。当然,这需要熟悉 Web 技术(HTTPHTML5CSS,可能还有JavaScriptAJAX)。然后您的用户将使用他/她的浏览器来查询您的应用程序的状态(或可能与之交互),或者使用一些 HTTP 客户端命令,如curl。我推荐这条路线,但它确实需要一些工作并熟悉 Web 技术。

您可能还对libssh库感兴趣。

您可以决定您的应用程序成为服务,并将其连接到systemd

PS。在编码之前,您应该花几天时间阅读内容。

于 2018-11-21T05:53:43.353 回答