Mat*_*son 11 c++ linux command-line-interface
我目前正在设计一个linux c ++应用程序.它将从命令行运行,然后一旦运行,我需要能够发出命令来控制它的执行,理想情况如下:
$ sudo ./myapplication
APP >
APP >
APP > //just pressing return
APP > openlog test1.txt //APP will now call the openlog function
APP >
Run Code Online (Sandbox Code Playgroud)
我想这是一个相对简单的任务,但我不知道为了搜索一个接口会调用什么样的接口.有没有人知道可以执行此功能的库或示例?或者我是否需要使用cout和cin编写自己的?如果是这样,会有任何首选方法吗?
ama*_*rea 13
我建议使用GNU readline库.它负责获取输入线的繁琐工作,并允许用户使用退格键,左箭头和右箭头等编辑其行,并使用向上箭头调用旧命令,甚至使用^ R搜索旧命令, Readline安装了类似Linux的典型unix类发行版,但是如果你没有它,你可以在这里找到它.
编辑:这是一个最小的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);
}
}
Run Code Online (Sandbox Code Playgroud)
在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";
}
Run Code Online (Sandbox Code Playgroud)