第五章 終端

2021-06-20 01:20:40 字數 2210 閱讀 2223

1.如果需要使用者在終端輸入乙個選項,程式中使用getchar來接收這個選項的話每次使用者輸入完乙個選項字元之後,需要按下回車鍵確認,所以系統會將這個字元以及緊隨其後的回車符傳遞給getchar,所以當第二次執行getchar時,它得到的就是乙個回車符。

程式真正看到的字元並不是ascii碼的回車符cr(十進位制表示13,十六進製制表示0d),而是換行符lf(十進位制10,十六進製制0a)。這是因為,linux同unix系統一樣,在其內部都是以換行符作為文字行的結束(ms-dos需要回車符和換行符兩個字元結合表示一行的結束)。linux這樣做的好處是使得文字檔案和二進位制檔案無任何實際的區別。

2.如果想知道標準輸出是否被重定向了,只需要檢查底層檔案描述符是否關聯到乙個終端即可。系統呼叫isatty就是用來完成這一任務的。

#include

int isatty(int fd);

如果開啟的檔案描述符fd連線到乙個終端,則系統呼叫isatty返回1,否則返回0。

如果stdout已經被重定向,此時使用者無法看到螢幕上的輸出,比較好的做法是將訊息寫到stderr中,它不會被shell的》file命令重定向。

3.linux是多使用者系統,通常擁有多個終端,但是linux和unix提供了乙個特殊裝置/dev/tty,這個裝置始終是指向當前終端或者當前的登陸會話,使用者可以用一般檔案的操作方式來對/dev/tty進行讀寫。

4.終端驅動程式

linux提供了一組程式設計介面用來控制終端驅動程式的行為,從而使得更好地控制終端的輸入或者輸出。

用unix的術語來說,控制介面定義了乙個「線路規程」,它使程式在指定終端驅動程式的行為時擁有極大的靈活性。

快取:是立即讀取字元,還是等待一段可配置的延遲之後再讀取。

回顯:允許控制字元的回顯,例如讀取密碼時。

回車/換行:定義如何在輸入輸出時對映回車/換行符,比如列印\n字元時如何處理。

線速:這一功能很少用於pc控制台,但對數據機或通過序列線連線的終端很有用。

5.termios結構

#include

struct termois

tcflag_t c_iflag;//輸入模式

tcflag_t c_oflag;//輸出模式

tcflag_t c_cflag;//控制模式

tcflag_t c_lflag;//本地模式

cc_t c_cc[nccs];//特殊控制字元

termios是在posix規範中定義的標準介面,它類似於系統v中的termio介面。通過設定termios型別的資料結構中的值和使用一小組函式呼叫,就可以對終端介面進行控制。

#include

int tcgetattr(int fd, struct termios *termios_p);

這個函式呼叫把當前終端介面變數的值寫入termios_p引數指向的結構。tcsetattr函式用來重新配置終端介面,函式原型如下:

#include

int tcsetattr(int fd, int actions, const struct termios*termios_p);

6.終端速度

termois結構提供的最後乙個功能是控制終端速度,但termois結構中並沒有與終端速度相對應的成員,它是通過函式呼叫來進行設定的。

7.終端的型別

許多unix系統都是通過終端來使用的,雖然如今在很多情況下,「終端」可能實際上只是在pc上執行的以個終端**程式或者是視窗環境中的乙個終端應用程式。

linux環境包含乙個變數term,它的值被設定為當前正在使用的終端型別。

# echo $term

8.虛擬控制台

linux提供了虛擬控制台的功能,一組終端裝置共享pc電腦的螢幕、鍵盤和滑鼠。通常情況下,乙個linux安裝將配置8個或者12個虛擬控制台。虛擬控制台通過字元裝置檔案/dev/ttyn使用,其中n代表乙個數字,從1開始。

如果使用字元介面登陸linux系統,在linux啟動並執行後,你首先會看到乙個login提示符,在輸入使用者名稱和密碼之後,你使用的終端裝置就是系統中的第乙個虛擬控制台,即終端裝置/dev/tty1。使用命令who和ps,即可檢視目前登陸系統的使用者,以及在這個虛擬控制台上執行的shell和執行的程式。

# who

# ps –e

linux系統通常在前6個虛擬控制台上執行乙個getty程序,這樣使用者即可用同乙個螢幕、鍵盤和滑鼠在6個不同的虛擬控制台上登陸。

9.偽終端

許多類unix系統,包括linux,都有乙個被稱為偽終端的功能,這些終端沒有對應的硬體裝置。

Linux程式設計 第五章終端 筆記

1 標準模式和非標準模式 標準模式,只有在使用者按下回車鍵後程式才能讀到終端的輸入,允許使用者退格和刪除來糾正輸入中的錯誤。非標準模式 應用程式對使用者輸入字元的處理擁有更大的控制權 unix 用乙個單獨的換行符來表示一行的結束,而其他作業系統勇回車符和換行符兩個字元的結合來表示一行的結束 2 de...

python第五章 Python學習(第五章)

記錄所有的名片字典 card list defshow menu 顯示資訊 print 50 print 歡迎使用 名片管理系統 v1.0 print print 1.新增名片 print 2.顯示全部 print 3.搜尋名片 print print 0.退出系統 print 50 defnew ...

第五章 雜湊

雜湊表adt,只支援二叉樹查詢所允許的一部分操作。比如插入,刪除,查詢等。那些需要元素間排序資訊的操作將不會得到支援。比如findmin,findmax和線性時間按排序順序列印整個表的操作時不支援的。雜湊函式在理想狀態是能將任何兩個不同的關鍵字對映到不同的單元,但是這是不可能,因為關鍵字是無窮的,但...