[英]How to enter/input special char ETB(ASCII 23) as a char in terminal?
如何在 Linux 终端中输入/输入 EOT(End of Trans)(ASCII 23)?
每次当我用alt + 23
输入时,我之前输入的所有字符都会是干净的。
比如输入ikl
,如果按照上面的方法输入 EOT,那么所有的字符串都是干净的。
ASCII 23 是 CTRL-W,在许多情况下是“删除单词”。
确切的答案取决于终端处于何种输入模式,如果处于原始模式,则最终解释输入的是哪个程序。 如果它处于熟模式,或者在其后面带有典型外壳(如 bash)的原始模式,则在输入前加上 CTRL-V(或任何stty -a
报告lnext
)应该可以解决问题。
在终端窗口或文本控制台中输入的字符在到达提示输入的 C 代码之前要经过多层解释。
如果您使用getc()
从用户那里读取字符,或更准确地说bytes ,则它们经过的最后一步是缓冲,可以使用setvbuf()
进行控制。
当这些字节来自终端时,终端设备处理程序会执行一个额外的缓冲步骤,从简单的退格处理到更复杂的行编辑功能,以及处理信号( Ctrl - C 、 Ctrl - Z 、 Ctrl - \\ ...)。 大多数终端将处理emacs
的行编辑绑定: Ctrl - A行首, Ctrl - E行尾, Ctrl - K杀行结束, Ctrl - Y猛拉(粘贴)...尽管不是 emacs 绑定Ctrl - W用于kill-word-backward。
因此,如果没有一些特定的解决方法,您不能在终端提示符下键入Ctrl - W来输入 ASCII 23 (EOT):
tcsetattr()
将终端设置为原始模式,使用户输入的每个字节都可用于程序,无论是否在标准流中缓冲。 在这两种情况下,在终端窗口中键入的字符可能需要换行符才能用于挂起的getc()
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.