有没有开源命令行库?

时间:2009-11-27 07:00:46

标签: c linux

我想为服务器程序添加命令行界面支持。

所以每次我想检查服务器的状态时,我都可以telnet到服务器的控制端口, 和输入命令来检查服务器的状态。

是否有任何开源库实现了这样的功能,所以我不需要从头开始编写它?

此外,如果库可以提供更多功能,例如cisco的命令行界面(Tab键提示,命令查询,vi模式,甚至基于符号的命令),那就太棒了。

5 个答案:

答案 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部分。