我想为服务器程序添加命令行界面支持。
所以每次我想检查服务器的状态时,我都可以telnet到服务器的控制端口, 和输入命令来检查服务器的状态。
是否有任何开源库实现了这样的功能,所以我不需要从头开始编写它?
此外,如果库可以提供更多功能,例如cisco的命令行界面(Tab键提示,命令查询,vi模式,甚至基于符号的命令),那就太棒了。
答案 0 :(得分:5)
libcli听起来就像你正在寻找的东西。它包括类似Cisco的功能和telnet服务器。我从来没有使用它,但是当我寻找类似的CLI时,我偶然发现了它。
答案 1 :(得分:2)
您可以使用socket
库来侦听TCP端口,在那里接收命令并输出您的状态。这样做的代码不多;可以在此处找到一个示例:http://www.paulgriffiths.net/program/c/echoserv.php。
(示例程序只返回已发送的命令;显然,您希望将Writeline(...);
替换为更适合您应用程序的内容。)
答案 2 :(得分:2)
从头开始写telnet
服务器几乎是微不足道的,唯一容易的就是过时的rlogin
协议,它仍然可以从ssh访问。你可以通过几个套接字调用来实现这样的功能。
我肯定会告诉你,不要使用telnet而是使用ssh。这是一个很好的建议,但你有两个不错的选择:在本地开放代码实现telnet并通过ssh隧道连接,或者使用ssh服务器通过安全通道登录。
请参阅此处:SSH servers。虽然apache具有可轻松嵌入的Java实现,但这对您没有直接帮助。如果您只是谷歌“telnet服务器”,您将获得比我在这里引用的更多链接,使用各种语言,其中许多包含示例代码以便于实现。史蒂文斯书籍也有可能直接对待这个话题。
答案 3 :(得分:2)
如果您不想处理套接字或共享内存段,则很容易让您的守护程序更新SQLite3数据库,以便客户端可以通过简单查询获取其统计信息,但是这可能会成为问题,因为您' d需要使用主机操作系统的用户/组管理来授予弱势用户访问权限。
在所有现实中,通常最好只使用简单的套接字连接。在Linux中,很容易弄清楚(本地)用户ID正在调用什么,只允许少数几个。
答案 4 :(得分:1)
readline
(3)你在寻找什么?
readline将从终端读取一行并将其返回,并使用提示作为提示。如果 prompt为NULL或空字符串,不发出提示。返回的行已分配 与malloc(3);调用者必须在完成后释放它。返回的行有最后的新 - 删除了行,因此只剩下该行的文本。
从问题中不清楚您是否希望实现用户交互的连接。这回答了UI部分。