基本介紹
- 中文名: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_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。