从控制台读取数据

时间:2013-07-29 01:31:41

标签: c++ linux macos console

我编写了一个控制台应用程序,它在运行时有自己的命令提示符。不幸的是,我不能简单地调用std :: cin并等待输入,因为我需要为了命令历史而解释up / down。

相反,我必须关闭echo并将控制台置于非规范模式,并使用'read'命令逐个获取每个字符,如果它们是可打印字符则回显它们,或者尝试解析/解释它们它是转义代码的开始。

我遇到的问题是难以阅读并以通用/通用方式解析各种转义代码。当我必须读取/解析对大小/位置查询的响应时,它变得更加成问题。

有没有更好的方式从终端读取?是否有可以读取/解析特殊终端代码的特殊功能? ncurses不是一个可行的选择(它清除屏幕,甚至只是使用filter()似乎过度杀伤),而其他应用程序一直这样做,而不必拉入这些依赖...我做错了什么?

这是我当前的'getch'函数的剪辑,它执行非常有限(并且使用更高级的代码,已损坏)读取。

int getch_ex()
{
    int buf = 0;
    size_t count = read(0, &buf, 1);
    if ((count > 0) && (buf == ESCAPE_CODE))
    {
        size_t count = read(0, &buf, 1); // [
        if ((count > 0) && (buf == '['))
        {
            count = read(0, &buf, 2);
        }
    }
    return (buf);
}

带有提示的其他终端应用程序(grub,python等等)如何实现这一目标?

我的主要目标是Linux和OS X.

2 个答案:

答案 0 :(得分:0)

如果您没有使用GUI或Windowing系统,请查看ncurses库包。

答案 1 :(得分:0)

查看readline库。听起来这正是你想要的。如果是商业代码,请注意license