一、設備文件處理與磁盤文件的區別
先說幾個比較直觀的感覺。首先,在你通過鍵盤(一般是標准的輸入的終端設備),輸入字符,直到你輸入的回車鍵(鍵盤上面的 Enter 為回車鍵,不是換行鍵;換行的 ACCII 為 10,回車為 13;換行在程序中的體現就是 \n),你的程序才會有“反應”,給人一種好像就是回車后你的程序才接受到你輸入的數據;
其次,你在程序中寫一個 printf(“This is a demo\n”); 你會發現你的下一個輸出就是在下一行的最左邊開始輸出的,但是,回車與換行的本身功能是:
\r 為 return,回車,即使光標回到當前行的頭;
\n為 newline,換行,即光標移動到當前位置的下一行。
所以,說明進程將你的 \n 轉化為了 \r\n。而在Linux下出現這些的原因,就是因為在終端設備與進程之間的中間,還有一個終端驅動器,里面有終端驅動函數。這里有兩張圖,便於大家理解。
進程和終端間的數據傳輸和數據處理是由終端設備驅動程序來負責的,終端驅動程序是內核的一部分。可以通過tesetattr和tegetattr函數來改變終端驅動程序里里面的設置
以上摘錄至這篇文章:https://blog.csdn.net/suliangkuanjiayou/article/details/86665901
二、stty 命令
1、作用
為了自己能夠編寫適合自己的終端驅動函數,即去修改終端驅動程序里面的設置。在Linux中有這個命令,就是 stty。
stty:用於顯示和修改終端命令行的相關設置(change and print terminal line settings)。
2、常用參數
stty 命令不帶參數可以打印終端行設置,加上 -a 參數可以打印得更詳細些。
stty size :可以顯示終端的大小,即行數和列數。
stty 命令還可以更改終端行的設置,格式如下:stty SETTING CHAR
其中,SETTING可以是如下:
eof : 輸入結束,文件結束,默認為Ctrl+D。比如:用cat >file來創建文件時,按Ctrl+D來結束輸入。
erase : 向后刪除字符,擦除最后一個輸入字符,默認為Ctrl+?。注意默認情況下退格鍵Backspace不是刪除字符。
intr : 中斷當前程序,默認為Ctrl+C。
kill : 刪除整條命令,刪除整行,默認為Ctrl+U。
quit :退出當前程序,默認為Ctrl+\或Ctrl+|。
start : 啟動屏幕輸出,默認為Ctrl+Q。
stop :停止屏幕輸出,默認為Ctrl+S。
susp : terminal stop當前程序,默認為Ctrl+Z。這樣當前進程就會變成后台進程了。
werase:刪除最后一個單詞,默認為Ctrl+W。
stty 命令還有一些其他用法,如:stty -echo 關閉回顯(比如在腳本中用於輸入密碼時),然后再用 stty echo 打開回顯。
#在命令行下,禁止輸出大寫的方法:
stty iuclc #開啟
stty -iuclc #恢復
#在命令行下禁止輸出小寫:
stty olcuc #開啟
stty -olcuc #恢復
#打印出終端的行數和列數:
stty size #改變Ctrl+D的方法:
stty eof "string"
#系統默認是Ctrl+D來表示文件的結束,而通過這種方法,可以改變!
#屏蔽顯示:
stty -echo #禁止回顯
stty echo #打開回顯 #測試方法:
stty -echo;read;stty echo;read #忽略回車符:
stty igncr #開啟
stty -igncr #恢復
3、使用示例
(1)打印終端行設置
[root@web ~]# stty
speed 38400 baud; line = 0; -brkint -imaxbel [root@web ~]# stty -a
speed 38400 baud; rows 41; columns 132; line = 0;
(2)打印當前終端的大小(行數和列數)
[root@web ~]# stty size
24 80
(3)設置退格鍵Backspace的刪除行為
在默認情況下,我們按退格鍵Backspace時,會在屏幕上回顯^H,而不是把前一個字符刪除。比如使用sftp/ftp/sqlplus/ij等命令時,就會碰到這種情況。我們可以使用stty命令把Backspace的行為變成刪除前一個字符。
sftp> get abc^H^H^H^H #修改刪除行為
[root@web ~]# stty erase ^H
(4)在vi編輯文件時按Ctrl+Q來結束終端僵死的局面
[root@web ~]# vi 1.txt
1
2
3 Ctrl+S ~ 注:按了Ctrl+S之后,就會禁止屏幕輸出,從而出現終端僵死的情況。 這個時候,只要按Ctrl+Q就會結束這種局面,因為它會允許屏幕輸出。 Ctrl+Q