簡體   English   中英

如何在終端中輸入/輸入特殊字符 ETB(ASCII 23)作為字符?

[英]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 - CCtrl - ZCtrl - \\ ...)。 大多數終端將處理emacs的行編輯綁定: Ctrl - A行首, Ctrl - E行尾, Ctrl - K殺行結束, Ctrl - Y猛拉(粘貼)...盡管不是 emacs 綁定Ctrl - W用於kill-word-backward。

因此,如果沒有一些特定的解決方法,您不能在終端提示符下鍵入Ctrl - W來輸入 ASCII 23 (EOT):

  • 您可以使用tcsetattr()將終端設置為原始模式,使用戶輸入的每個字節都可用於程序,無論是否在標准流中緩沖。
  • 用戶可以在Ctrl - W之前鍵入Ctrl - V以告訴終端設備驅動程序繞過Ctrl - W組合鍵的處理。

在這兩種情況下,在終端窗口中鍵入的字符可能需要換行符才能用於掛起的getc()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM