[英]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.