首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

Curses 終端模式深度解析:六大模式完整指南

     編輯:關於C語言

六大終端模式對比

1. ECHO 回顯模式

int echo();    // 開啟:輸入字符即時顯示
int noecho();  // 關閉:輸入不顯示(密碼輸入必備)

2. CBREAK 立即輸入模式

int cbreak();     // 開啟:字符即時讀取,無需回車
int nocbreak();   // 關閉:恢復行緩衝模式

特點:除 DELETE/CTRL 等控制字符外,所有字符立即可讀。默認開啟。舊版用 crmode()/nocrmode()。

3. NEWLINE 換行模式

int nl();     // 開啟:回車轉換為換行
int nonl();   // 關閉:保持回車原樣

控制輸入時 \r 與 \n 的轉換行為。

4. KEYPAD 功能鍵模式

int keypad(WINDOW* win, int flag);  // TRUE/FALSE

核心作用:將方向鍵、功能鍵等特殊鍵盤掃描碼轉換為 Curses 內部 KEY_* 常量,否則 wgetch() 無法識別。

常用 KEY_* 常量表

常量對應鍵
KEY_UP/DOWN/LEFT/RIGHT四個方向鍵
KEY_HOME / KEY_ENDHome / End
KEY_BACKSPACE退格鍵
KEY_F(n)功能鍵 F1~F12
KEY_PPAGE / KEY_NPAGEPage Up / Page Down
KEY_IC / KEY_DCInsert / Delete
KEY_IL / KEY_DL行插入 / 行刪除

5. RAW 原始模式

int raw();    // 開啟:所有字符直通,含 Ctrl+C 等信號鍵
int noraw();  // 關閉

特點:完全禁用終端驅動程序處理,所有特殊字符產生信號而非控制動作。與 CBREAK 同時開啟時,RAW 生效。

6. 延遲模式

半延遲

int halfdelay(int tenth);  // tenth:十分之一秒單位

類似 CBREAK,但超時返回 ERR。用 nocbreak() 取消。

無延遲(非阻塞)

int nodelay(WINDOW* win, bool bf);  // TRUE=非阻塞

將 wgetch() 從阻塞調用轉為非阻塞,無輸入立即返回 ERR,適用於遊戲主循環、即時監控等場景。

模式選擇建議

場景推薦組合
互動式選單/表單cbreak + noecho + keypad
密碼輸入cbreak + noecho
即時遊戲/動畫cbreak + nodelay + keypad
原始協議調試raw + noecho

精準掌握各模式特性與組合,是編寫健壯終端應用的關鍵。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved