我正在使用 read() 系统调用从标准输入中读取数据,但是有一件小事困扰着我。我不能使用箭头键...我真正想做的是使用箭头键在键入的文本中来回移动,但我认为这并不容易...所以,我至少想做的,就是忽略它们。
现在,按下任何箭头键都会产生奇怪的输出,我想阻止任何东西被写入标准输出(随后在我的 read() 系统调用中从标准输入读取)。
这很容易实现还是没那么容易?
我正在使用 read() 系统调用从标准输入中读取数据,但是有一件小事困扰着我。我不能使用箭头键...我真正想做的是使用箭头键在键入的文本中来回移动,但我认为这并不容易...所以,我至少想做的,就是忽略它们。
现在,按下任何箭头键都会产生奇怪的输出,我想阻止任何东西被写入标准输出(随后在我的 read() 系统调用中从标准输入读取)。
这很容易实现还是没那么容易?
为了以理想的方式解释箭头键(即来回移动和编辑输入),您通常需要使用库。对于 Linux,标准是GNU Readline。希望其他人可以说出您通常用于 Windows CLI 应用程序的内容。
答案最终取决于密钥的来源。我在 Cygwin 下运行这个程序:
int main(void)
{
int c=0;
while( c != 'X' ) {
c = getchar();
printf("\nc=%d", c);
}
}
每次出现光标键时,我都会看到转义 (27)、括号和另一个字符。所以,如果你得到这样的结果,你可以在每次看到 27 时跳过 3 个键。你也可以看看它们并利用它们!
如前所述,YMMV,特别是对于操作系统,以及您调用的实际密钥获取函数。