2012-07-06 241 views
0

我入門的Linux設備驅動程序的開發,我經常看到這樣的代碼,但無法瞭解它究竟:Linux設備驅動程序

#<linux/fs.h> 
loff_t (*llseek) (struct file *, loff_t,int); 

的llseek方法是用來改變的讀寫在文件中的位置。loff_t是一個長偏移參數。 我不明白的是上面的語法以及它是如何工作的。 有人可以擺脫一些光線嗎?

回答

1
loff_t (*llseek) (struct file *, loff_t,int); 

這只是說,llseek是一個指向返回loff_t和三個參數的函數。第一個參數是指向struct file的指針。第二個是loff_t。第三個是int

但是,如果仔細觀察,您會看到它出現在struct file_operations的聲明中。這意味着struct file_operations包含一個名爲llseek的成員,該成員是指向返回loff_t並採用這三個參數的函數的指針。順便說一句,如果你不明白如何使用像包含函數指針的結構這樣的東西來做OOP編程,那麼在內核設備驅動程序附近你實際上沒有任何業務。 (如果你熟悉C++,那麼就明白一個指向函數的結構基本上就是你用C僞造類的方式。)

+0

我唯一懷疑的地方是loff_t(* llseek)。這似乎很明顯。 – user1179510 2012-07-06 10:55:29

+0

C++程序員不熟悉OOP如何在C中「僞造」是很平常的事情。如果您瞭解C++類,您將很快掌握C++類。這是一種多態的形式。 – 2012-07-07 02:38:47

相關問題