【问题标题】:How do I create a linux C application with a console that I can connect to remotely如何使用可以远程连接的控制台创建 linux C 应用程序
【发布时间】:2019-04-23 15:51:57
【问题描述】:

我有一个多线程应用程序 在 Debian (Stretch) 下运行的 C。中的一个 线程是一个简单的控制台,支持多个 命令来控制应用程序。一般 此应用程序在以下时间自动启动 系统启动并在后台运行 控制台线程已禁用。

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

在开发过程中,我只是以交互方式运行应用程序 但希望在它拥有之后进行调试的选项 已经开始了。

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

有没有办法做到这一点?

【问题讨论】:

  • 如果您的程序在您以交互方式从控制台运行时可以运行,并且您不想承担(重要的!)工作来添加网络文本界面,您可以在引导期间在screen 进程。 Screen 设置了一个虚拟终端 I/O 环境,您可以将您的真实终端连接到它并与那里运行的程序交谈。完成后,您可以断开与screen 的连接,程序不会知道其中的区别。
  • 使用虚拟终端似乎是正确的方法。 tmuxscreen 都可以达到这个目的。
  • 好主意。我会考虑使用其中之一。另外,感谢 Basile 指出了一些很棒的研究主题。

标签: c linux console-application remote-access debian-stretch


【解决方案1】:

阅读有关 Linux 编程的更多信息,也许是旧的 ALP(高级 linux 编程)书(免费 downloadable),或者更新的东西。另请参阅syscalls(2) 列表。你想要一些inter-process communication

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

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

您可能还对libssh 库感兴趣。

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

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

【讨论】:

    猜你喜欢
    • 2015-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-21
    • 2017-10-15
    • 1970-01-01
    • 2016-12-05
    • 1970-01-01
    相关资源
    最近更新 更多