termios.h如何使用特殊字符

时间:2014-03-22 03:13:02

标签: c termios

我有一个设置在〜(ICANON)模式的终端,想知道如何使用我得到的退格数据(这是^?)所以我可以发送一个putchar('\ b')到控制台回到一个空间。

编辑:

struct termios new;
newt.c_lflag &= ~(ICANON);
tcsetattr(STDIN_FILENO, TCSANOW, &newt); // Set the console to send each char straight away.

char c;
while ((c = getchar()) != '\n){
   // If the backspace key is pressed, the symbols ^? appear on the screen. How do I
   // Interpret the backspace to send back a '\b' char to the screen. I don't want the ^?
   // to appear on the screen when the backspace is pressed but rather the cursor move one
   // space to the left.
}

由于

1 个答案:

答案 0 :(得分:1)

当终端处于原始模式(~ICANON)时, BkSp 键将输出字节0x7f,终端不会将其解释为退格。 (这是因为它可以与击键 ^ H 区分开。)如果你希望这个击键被终端解释为退格,你将需要:

  1. 在终端上禁用回音(~ECHO),然后
  2. 在输入时回显大多数字符,但将0x7f作为0x08\b)回显。 (您可能还需要将\n作为\r\n回显。)