【发布时间】:2017-08-27 00:36:43
【问题描述】:
在这个问题中,我问的是readline 的一项特定功能:
Readline 库包含额外的函数,用于维护先前输入的命令行列表、调用和重新编辑这些行
现在在带有 Visual Studio 的 Windows 上,您不再需要臭名昭著的 readline。您可以使用fgets,箭头键会很高兴地回忆起您之前输入的内容。当然你也可以编辑这些。
在 linux 上,相同的代码(fgets 在循环中)不能这样工作。向上箭头显示为^[[A,左右箭头也不允许您导航线,如实验所示,还描述了here。
我的问题是,Windows 的哪一部分使编辑成为可能?
我认为它可以是 conhost.exe 或 fgets 等的实现方式。不知怎的,我怀疑是前者。无论如何,我想知道 它是如何工作的,如果它记录在任何地方等等。例如,除了箭头之外,还有哪些其他键具有特殊含义并以不同方式处理而不是返回为缓冲区 fgets 的 par 写入。
【问题讨论】:
-
我认为这在逻辑上由控制台设备处理,并且仅在控制台设备位于cooked mode 时发生。实现细节可能会发生变化,但是是的,我猜它实际上发生在当前版本的 Windows 中的
conhost.exe中。我很确定它不是 C 运行时库的一部分,即与fgets无关。
标签: c linux windows console cross-platform