2013-05-06 48 views
0

我在定製的內核模塊中在securityfs中創建了多個dentry對象。下面是我如何做它:對VFS中的不同文件使用相同的file_operation

inst->output_file = securityfs_create_file("1", 
           S_IRUSR | S_IRGRP, uprp_dir, NULL, 
           &my_file_ops); 
inst->output_file = securityfs_create_file("2", 
           S_IRUSR | S_IRGRP, uprp_dir, NULL, 
           &my_file_ops); 
// and so on 

我有my_file_ops實現通常的順序操作。但問題是,下面的函數被調用爲所有dentry對象:

static int ct_open(struct inode *inode, struct file *file) 

,然後繼續使用方法:

static void *my_seq_ops_start (struct seq_file *m, loff_t *pos) 

的問題是,我該如何找出哪些目錄項用戶想要讀取的對象(在任何這些函數中)? - 意思是我想爲文件12輸出不同的東西。

回答

1

當VFS通過my_file_ops結構調用你ct_open()功能,它傳回的是開放的,同時作爲struct inode *文件,並作爲struct file *struct file包含一個成員f_dentry,它是一個指向由securityfs_create_file()返回的dentry的指針。 struct dentry包含文件名。

然而,即使更乾淨的是securityfs_create_file()的第四個參數供您使用的事實。您可以將任何指針傳遞給所需的任何內部結構,並在inode.i_private指針的打開操作期間檢索它。這通常是「正確的」抽象級別,因此您的文件操作不需要知道文件名的任何內容。

+0

非常感謝。我更喜歡第二種方法,因爲它更容易實施。如果您推薦兩種方案中的「更好」,那就太好了,僅供參考。 – recluze 2013-05-07 04:30:20

相關問題