首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++命令行界面

C++命令行界面
EN

Stack Overflow用户
提问于 2012-11-01 07:21:00
回答 10查看 19.7K关注 0票数 14

我目前正在设计一个linux c++应用程序。它将从命令行运行,然后一旦运行,我需要能够发出命令来控制其执行,理想情况如下:

代码语言:javascript
复制
$ sudo ./myapplication
APP > 
APP > 
APP > //just pressing return
APP > openlog test1.txt //APP will now call the openlog function
APP >

我认为这是一个相对简单的任务,但我不知道这样的接口将被调用来搜索一个。有谁知道可以执行此功能的库或示例吗?或者我需要使用cout和cin来编写自己的代码?如果是这样的话,有没有更好的方法?

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2012-11-01 07:47:59

为此,我推荐使用GNU readline库。它负责获取输入行的繁琐工作,并允许用户使用退格键、左箭头和右箭头等编辑行,使用向上箭头调用旧命令,甚至使用^R等搜索旧命令。Readline随典型的类unix发行版一起安装,如linux,但如果您没有它,您可以找到它here

编辑:下面是一个最小的readline示例:

代码语言:javascript
复制
#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);
    }
}
票数 16
EN

Stack Overflow用户

发布于 2012-11-01 07:48:21

如果您想要完整的行编辑和历史记录功能,那么GNU readline库是非常好的,但是如果您想要一个简单的提示符就足够了(或者如果您不想要GNU ),那么您可以只使用标准库:

代码语言:javascript
复制
#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";
}
票数 8
EN

Stack Overflow用户

发布于 2012-11-01 10:37:20

到目前为止,GNU readline是一个很好的选择,正如其他人所建议的那样。如果许可问题会迫使您排除它,那么您应该考虑linenoise

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13168833

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档