我已經搜索了很多,但我根本找不到任何關于CTRL 輸入如何在終端中作業以及與STDIN
我的設定:
- 在不產生終端信號的情況下暢通輸入
- 閱讀
STDIN_read(2)
我想我知道的:
- 在 termbox2 源代碼中,我看到它
CTRL A等同于 number1,它又等同于“標題開頭”的 ASCII 代碼。
現在,我完全困惑的是所有這些是如何相互聯系的?輸入是否CTRL letter從字面上將 1 到 26 之間的數字放入 STDIN?^A符號只是數字 1 的表示嗎?終端是否偵聽CTRL C4 號或 ASCII“傳輸結束”?或者CTRL G哪個顯然是7ASCIIBELL字符,也可以寫成'\a'代碼。CTRL 除了晦澀的源代碼之外,我在哪里可以找到由組合生成的數字?
我相信這一切都有一個非常簡單的解釋,但我只知道這個謎題的點點滴滴,無法將它聯系起來。
請幫忙!
uj5u.com熱心網友回復:
這一切是如何相互聯系的?
有一個“終端程式”(或只是“終端”),例如 termbox2,還有一個 TTY 設備,例如/dev/pts/2.
Ctrl 字母被終端檢測為按鍵。終端將其轉換為它的 ASCII 控制代碼(例如 Ctrl A 變為 1,Ctrl G 變為 7),并將此代碼寫入 TTY 設備。
TTY 驅動程式在 TTY 輸入流中看到一個控制代碼。如果終端處于“cooked 模式”,并且 TTY 可以操作控制代碼,它將將該位元組從 TTY 輸入流中拉出并對其進行操作。如果終端處于原始模式,則控制代碼僅保留在流中。
例如,“對它采取行動”可能意味著將^Z(ASCII 26) 轉換為 aSIGTSTP到前臺運行的行程。
現在,如果終端被配置為向終端回顯輸入(例如,正常打字,但不用于密碼),那么任何未從 TTY 輸入流中提取的位元組也將被發送到 TTY 輸出流。
所以終端在 TTY 輸出流中看到一個值為 1 的位元組。
通常,如果它看到像e(ASCII 101) 這樣的常規位元組,它只會列印它。
ASCII 7 (BELL) 沒有定義的顯示,但已知它是由 Ctrl G 生成的,因此終端嘗試盡可能提供資訊并將其列印為^G.
CTRL 字母輸入是否將 1 到 26 之間的數字直接放入 STDIN?
是的,如果 TTY 驅動程式沒有截獲控制代碼。
^A符號只是數字 1 的表示嗎?
是的。
終端是否監聽 CTRL C、數字 4 或 ASCII“傳輸結束”?
終端程式偵聽鍵Ctrl和C.
從終端程式獲取輸入的終端驅動程式監聽數字 4。
或者 CTRL G 顯然是 7 和 ASCII BELL 字符,在代碼中也可以寫成 '\a'。
終端將 和 的組合轉換Ctrl為G數字 7。C
編譯器將其轉換\a為數字 7。
除了晦澀的源代碼之外,我在哪里可以找到由 CTRL 組合生成的數字?
維基百科。
課外活動:這篇文章真正涉及到 TTY 的血腥細節。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/523665.html
標籤:C
上一篇:使用fgets從C中的文本檔案中讀取:如果不是\0和\n,那是什么字符?
下一篇:與用于列印值的字串指標的語法混淆
