usb設計中的管道pipe描述
usb設計中的管道pipe描述
在USB設計中,常有描述管道的說明,對應的圖示為:
在實際設計中:pipe為一個int數
定義如下:
以32位系統為例,int為32 bit.
bit:31-30:為管道傳輸的流型別
- 00: isochronous flow
- 01: interrupt flow
- 02: control flow
- 03: bulk flow
bit:29-20:暫未使用,為0
bit:19-16: endpoint 地址
注,endpoint共4位,
bit3-0:endpoint編號
bit15:暫未使用,為0
bit:14-8:usb device number
bit7表示傳輸方向
為0,表示從host到device;
為1:表示從device到host
bit:6-0:暫未使用,為0
管道傳輸的資料內容有兩種
steam型別,資料型別沒有定義
message型別,資料型別有被定義
---------------------------------------------------------------------------------------------------------------------
管道的概念:
管道是一種最基本的IPC機制,作用於有血緣關係的程序之間,完成資料傳遞。呼叫pipe系統函式即可建立一個管道。有如下特質:
1. 其本質是一個偽檔案(實為核心緩衝區)
2. 由兩個檔案描述符引用,一個表示讀端,一個表示寫端。
3. 規定資料從管道的寫端流入管道,從讀端流出。
管道的原理: 管道實為核心使用環形佇列機制,藉助核心緩衝區(4k)實現。
管道的侷限性:
① 資料自己讀不能自己寫。
② 資料一旦被讀走,便不在管道中存在,不可反覆讀取。
③ 由於管道採用半雙工通訊方式。因此,資料只能在一個方向上流動。
④ 只能在有公共祖先的程序間使用管道。
常見的通訊方式有,單工通訊、半雙工通訊、全雙工通訊。
pipe函式
建立管道
int pipe(int pipefd[2]); 成功:0;失敗:-1,設定errno
函式呼叫成功返回r/w兩個檔案描述符。無需open,但需手動close。規定:fd[0] → r; fd[1] → w,就像0對應標準輸入,1對應標準輸出一樣。向管道檔案讀寫資料其實是在讀寫核心緩衝區。