正在从控制台读取数据

Reading data from the console

本文关键字:读取 数据 控制台      更新时间:2023-10-16

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

相反,我不得不关闭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。

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

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