1. 程式人生 > >linux串列埠程式設計(控制流與終端)

linux串列埠程式設計(控制流與終端)

流控制

資料在兩個串列埠之間傳輸時,常常會出現丟失資料的現象,或者兩臺計算機的處理速度不同,如桌上型電腦與微控制器之間的通訊,接收端資料緩衝區已滿,則此時繼續傳送來的資料就會丟失。流控制能解決這個問題,當接收端資料處理不過來時,就發出“不再接收”的訊號,傳送端就停止傳送,直到收到“可以繼續傳送”的訊號再發送資料。因此流控制可以控制資料傳輸的程序,防止資料的丟失。

PC中有兩種流控制方法:

軟體”流控制

“軟體”流控制:這種方法採用特殊字元來開始(XON,DC1,八進位制數021)或者結束(XOFF,DC3或者八進位制數 023)資料流。當接收端的輸入緩衝區內資料量超過設定的高位時,就向資料傳送端發出xoff字元(十進位制的19或control-s,裝置程式設計說明書應該有詳細闡述),傳送端收到 xoff字元後就立即停止傳送資料;當接收端的輸入緩衝區內資料量低於設定的低位時,就向資料傳送端發出xon字元(十進位制的17或control- q),傳送端收到xon字元後就立即開始傳送資料。

 “硬體”流控制

“硬體”流控制:這種方法使用RS-232標準的CTS和RTS訊號來取代之前提到的特殊字元。當準備就緒時,接受一方會將CTS訊號設定成為space電壓,而尚未準備就緒時它會被設定成為mark電壓。相應得,傳送方會在準備就緒的情況下將RTS設定成space電壓。正因為硬體流控制使用了於資料分隔的訊號,所以與需要傳輸特殊字元的軟體流控制相比它的速度很快。但是,並不是所有的硬體和作業系統都支援CTS/RTS流控制。

 

終端

終端是一種字元型裝置,它分為一下四種:

(1)    串列埠終端(Serial Port Terminal)

串列埠終端:是使用計算機串列埠連線的裝置,計算機把每個串列埠都看作是一個字元裝置。串列埠所對應的裝置名稱 為/dev/ttySn(n表示從0開始的整數)。

(2)    偽終端(Pseudo Terminal)

偽終端:是成對的邏輯終端裝置,例如/dev/ptyp3 和/dev/ttyp3 (在裝置檔案系統中分別是/dev/pty/m3 和/dev/pty/s3 ), 它們與實際物理裝置並不直接相關。

(3)    控制終端(Controlling Terminal)

控制終端:當前程序的控制終端的裝置特殊檔案 /dev/tty。可以使用命令”ps –ax ”來檢視程序與哪個控制終端相連使用命令”tty ”可以檢視它具體對應哪個實際終端裝置。/dev/tty 有些類似於到實際所使用終端裝置的一個聯接。

(4)    控制檯終端(Console)

控制檯終端:計算機顯示器通常被稱為控制檯終端(Console),它模擬了型別為Linux的一種終端(TERM=Linux),並且有一些裝置特殊檔案與之相關聯:tty0、tty1、tty2等。