0
我入門的Linux設備驅動程序的開發,我經常看到這樣的代碼,但無法瞭解它究竟:Linux設備驅動程序
#<linux/fs.h>
loff_t (*llseek) (struct file *, loff_t,int);
的llseek方法是用來改變的讀寫在文件中的位置。loff_t是一個長偏移參數。 我不明白的是上面的語法以及它是如何工作的。 有人可以擺脫一些光線嗎?
我入門的Linux設備驅動程序的開發,我經常看到這樣的代碼,但無法瞭解它究竟:Linux設備驅動程序
#<linux/fs.h>
loff_t (*llseek) (struct file *, loff_t,int);
的llseek方法是用來改變的讀寫在文件中的位置。loff_t是一個長偏移參數。 我不明白的是上面的語法以及它是如何工作的。 有人可以擺脫一些光線嗎?
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僞造類的方式。)
我唯一懷疑的地方是loff_t(* llseek)。這似乎很明顯。 – user1179510 2012-07-06 10:55:29
C++程序員不熟悉OOP如何在C中「僞造」是很平常的事情。如果您瞭解C++類,您將很快掌握C++類。這是一種多態的形式。 – 2012-07-07 02:38:47