BUF結構

av_forw 和 av_back驅動程式可用以管理其使用的一組緩衝區的指針。有關 av_forw 和 av_back 指針的討論,請參見異步數據傳輸(塊驅動程式)。

基本介紹

  • 中文名:BUF結構
  • 外文名:BUF
  • 類型:驅動程式
  • 結構:BUF結構
結構,參數說明,

結構

以下 buf 結構成員對塊驅動程式很重要:
int b_flags; /* Buffer Status */
struct buf *av_forw; /* Driver work list link */
struct buf *av_back; /* Driver work list link */
size_t b_bcount; /* # of bytes to transfer */
union {
caddr_t b_addr; /* Buffer's virtual address */
} b_un;
daddr_t b_blkno; /* Block number on device */
diskaddr_t b_lblkno; /* Expanded block number on device */
size_t b_resid; /* # of bytes not transferred */
/* after error */
int b_error; /* Expanded error field */
void *b_private; /* “opaque” driver private area */
dev_t b_edev; /* expanded dev field */其中:
b_bcount指定要由設備傳輸的位元組數。

參數說明

b_un.b_addr數據緩衝區核心虛擬地址。僅在進行 bp_mapin(9F) 調用後有效。
b_blkno設備上用於數據傳輸的起始 32 位邏輯塊編號,以 DEV_BSIZE(512 位元組)為單位。驅動程式應使用 b_blkno 或 b_lblkno,但不能同時使用兩者。
b_lblkno設備上用於數據傳輸的起始 64 位邏輯塊編號,以 DEV_BSIZE(512 位元組)為單位。驅動程式應使用 b_blkno 或 b_lblkno,但不能同時使用兩者。
b_resid由驅動程式設定的用於表明由於發生錯誤而未傳輸的位元組數。有關設定 b_resid 的示例,請參見示例 16–7。b_resid 成員會過載。此外,disksort(9F) 也會使用 b_resid。
b_error當發生傳輸錯誤時,由驅動程式設定為錯誤編號。b_error 應與 b_flags B_ERROR 位一起設定。有關錯誤值的詳細信息,請參見 Intro(9E) 手冊頁。驅動程式應使用 bioerror(9F),而不是直接設定 b_error。
b_flags表示 buf 結構的狀態屬性和傳輸屬性的標誌。如果設定了 B_READ,則 buf 結構指明從設備到記憶體的傳輸。否則,此結構指明從記憶體到設備的傳輸。如果在數據傳輸期間驅動程式遇到錯誤,則該驅動程式應設定 b_flags 成員中的 B_ERROR 欄位。此外,該驅動程式還應在 b_error 中提供一個更明確的錯誤值。驅動程式應使用 bioerror(9F),而不是設定 B_ERROR。
注意 – 驅動程式絕不能清除 b_flags。
b_private專供驅動程式存儲驅動程式專用數據。
b_edev包含用於傳輸的設備的設備編號。BUF結構

相關詞條

熱門詞條

聯絡我們