file_operation囊括了所有裝置操作到裝置號的鏈結。在linux中驅動以檔案的方式存在,而file_operation則是對檔案(這裡是是字元裝置)的所有操作的集合。由於file_operation的成員太多,而當前scull專案僅僅用到了其中的幾個。 scull專案的file_operation初始化如下:
1struct
file_operations scull_fops
=;
owner指向擁有這個結構的模組,幾乎所有情況下,它的值都是this_module,這是乙個定義在中的巨集;llseek 方法用作改變檔案中的當前讀/寫位置, 並且新位置作為(正的)返回值;read用來從裝置中獲取資料;write用來傳送資料給裝置;.ioctl 用來發出裝置特定命令(非read或write);open為開啟裝置檔案,顯然這應該是對裝置檔案進行的第乙個操作;.release 釋放檔案結構。
file資料結構代表乙個開啟的檔案(記住裝置被當做了檔案)。如同file_operation指定了操作的集合,file就是這些操作的目標物件了。
inode資料結構也表示檔案,不過他跟file資料結構不同(估計這個區別以後才能了解)。對於編寫驅動來說,這個資料結構就兩個字段有用。dev_t i_rdev代表裝置編號,struct cdev *i_cdev;代表乙個字元裝置。詳細的資訊到使用的時候再深入研究。
要說明的是,linux源**在初始化這些資料結構的時候一般都是用c語言的標記式結構初始化語法。
linux核心在內部使用型別struct cdev來代表字元裝置。而在scull中,使用乙個自定義的struct scull_dev型別的
結構來表示每個裝置,這個結構包括了乙個struct cdev結構:
1struct
scull_dev ;
初始化這一結構並註冊的函式如下:
1static
void
scull_setup_cdev(
struct
scull_dev
*dev,
intindex)
2
這樣就完成了乙個字元裝置的初始化和註冊。
(資料結構)第三章 列表
向量中的秩同時對應於邏輯和物理次序,而位置僅對應於邏輯次序。3.3.1 資料結構支援的操作 靜態和動態。size 和get 均可以在常數時間內完成。insert 和remove 均需要線性時間完成。鍊錶是一種典型的動態儲存結構。節點之間通過指標相互索引和訪問。列表是鍊錶結構的一般化推廣,其中的元素稱...
資料結構 第三章 佇列
佇列 queue 具有一定操作約束的線性表 特點 fifo 即先來先服務,只能在一端插入,在另一端刪除 順序儲存實現 由乙個一維陣列和乙個記錄頭元素位置的變數front以及乙個記錄隊尾元素位置的變數rear組成 define maxsize 儲存資料元素的最大個數 struct qnode type...
資料結構第三章小結
一 第三章主要學習了棧和佇列,也發現了佇列的鏈式操作中有些跟第二次小組合作的思路是一樣的,因而在學習過程可以輕鬆掌握。二 完成作業或實踐時的心得體會 1 pta上的作業 使用了stl以及自定義棧的方法,對於stl是初次使用,後面可以多多用 實踐2中發現自己在乙個迴圈中,忽視乙個判斷條件導致在pta上...