2013-10-26 35 views
3

我正在實現一個字符驅動程序。所以我正在註冊文件操作。當我註冊read功能我提取minor號這樣爲什麼打開調用兩個參數(struct inode *,struct file *)?

 myread(struct file * file, char __user * ubuf, size_t lbuf, loff_t *offset) 
    { 
     int minor; 

     minor = MINOR(file->f_path.dentry->d_inode->f_pos->i_rdev); 
     ....... 

此規則將適用於open通話了。

 myopen(struct inode * inode, struct file * file) 

struct file定義有參考struct inode。所以一個參數就足夠用於open調用。

我的問題是:

  1. 爲什麼open有兩個參數? (或)爲什麼read沒有struct inode *的說法?
  2. 要提取read呼叫中的次要號碼,我使用上述說明。爲了找到定義和頭文件,我花了1小時30分鐘。有沒有簡單的方法來找到結構的定義?
  3. 有多少種方法可以找到struct inodestruct file的參考文獻,最佳方法是什麼?
+0

因爲內核約定是這樣的。改變它們需要大量的代碼重寫。 –

回答

4

您不能使用該構造來搜索inode;該文件甚至目錄可能已在文件打開後被刪除。

內核約定(見Linux Device Drivers第3章)是

  1. open功能

    ,你從inode查找自己的數據(或分配您自己的數據),並設置file->private_data指針;和

  2. read功能

    ,你再使用file->private_data訪問你自己的東西。