還有一些數(shù)據(jù)結(jié)構(gòu)也比較關(guān)鍵, 關(guān)系也比較復(fù)雜:
*dev_t:
這個不是structure, 是簡單變量, 只用于保存一組major number和minor number.
Linux提供一組Macro對其進(jìn)行讀寫:
MAJOR(dev_t dev); /* 取設(shè)備的major number */
MINOR(dev_t dev); /* 取設(shè)備的minor number */
MKDEV(int major, int minor); /* 從一組指定的major number和minor number創(chuàng)建一個dev_t */
*struct cdev:
用于表示一個char型的設(shè)備.
*struct file_operations:
用于定義一組在某類文件上操作的函數(shù), 根據(jù)文件類型不同, 需要實(shí)現(xiàn)的接口也不同.
*struct file:
用于表示某個“打開的”文件, 是與進(jìn)程相關(guān)的. 每次在有程序?qū)ξ募?zhí)行open系統(tǒng)調(diào)
用時創(chuàng)建. 也就是說, 同一個文件/設(shè)備, 對應(yīng)在其上操作的不同的進(jìn)程, 會創(chuàng)建多個file
結(jié)構(gòu), 而實(shí)際上操作的文件(或者說inode)是同一個。struct file里面有當(dāng)前的指針位置
和一些標(biāo)記位等信息;還有指向一個file_operations結(jié)構(gòu)的指針,對于設(shè)備文件,這用于
提供到驅(qū)動程序的接口。
*struct inode:
用于表示文件系統(tǒng)樹形結(jié)構(gòu)中的一個節(jié)點(diǎn),不論是目錄還是文件。它里面保存的是文件
的具體信息,每個文件只對應(yīng)一個inode結(jié)構(gòu)。對于char型設(shè)備文件,這里面主要有兩個
field有用:
dev_t i_rdev; /* 在表示設(shè)備文件的inode中用于存放major number和minor number */
struct cdev *i_cdev;
/* 在表示char型設(shè)備文件的inode中用于存放指向?qū)?yīng)的cdev的指針 */