我目前正在设计一个linux c++应用程序。它将从命令行运行,然后一旦运行,我需要能够发出命令来控制其执行,理想情况如下:
$ sudo ./myapplication
APP >
APP >
APP > //just pressing return
APP > openlog test1.txt //APP will now call the openlog function
APP >我认为这是一个相对简单的任务,但我不知道这样的接口将被调用来搜索一个。有谁知道可以执行此功能的库或示例吗?或者我需要使用cout和cin来编写自己的代码?如果是这样的话,有没有更好的方法?
发布于 2012-11-01 07:47:59
为此,我推荐使用GNU readline库。它负责获取输入行的繁琐工作,并允许用户使用退格键、左箭头和右箭头等编辑行,使用向上箭头调用旧命令,甚至使用^R等搜索旧命令。Readline随典型的类unix发行版一起安装,如linux,但如果您没有它,您可以找到它here。
编辑:下面是一个最小的readline示例:
#include <stdio.h>
#include <readline/readline.h>
#include <readline/history.h>
int main(int argc, char ** argv)
{
while(1)
{
char * line = readline("> ");
if(!line) break;
if(*line) add_history(line);
/* Do something with the line here */
free(line);
}
}发布于 2012-11-01 07:48:21
如果您想要完整的行编辑和历史记录功能,那么GNU readline库是非常好的,但是如果您想要一个简单的提示符就足够了(或者如果您不想要GNU ),那么您可以只使用标准库:
#include <iostream>
#include <string>
void process(std::string const & line);
int main()
{
for (std::string line; std::cout << "APP > " && std::getline(std::cin, line); )
{
if (!line.empty()) { process(line); }
}
std::cout << "Goodbye.\n";
}发布于 2012-11-01 10:37:20
到目前为止,GNU readline是一个很好的选择,正如其他人所建议的那样。如果许可问题会迫使您排除它,那么您应该考虑linenoise。
https://stackoverflow.com/questions/13168833
复制相似问题