Linux デバイス ドライバーの開発を始めたばかりですが、この種のコードをよく見かけますが、正確に何をしているのか理解できません。
#<linux/fs.h>
loff_t (*llseek) (struct file *, loff_t,int);
llseek メソッドは、ファイル内の読み書き位置を変更するために使用されます。loff_t は長いオフセット パラメータです。私が理解していないのは、上記の構文とそれが実際にどのように機能するかです。誰かが光を当ててくれませんか?
Linux デバイス ドライバーの開発を始めたばかりですが、この種のコードをよく見かけますが、正確に何をしているのか理解できません。
#<linux/fs.h>
loff_t (*llseek) (struct file *, loff_t,int);
llseek メソッドは、ファイル内の読み書き位置を変更するために使用されます。loff_t は長いオフセット パラメータです。私が理解していないのは、上記の構文とそれが実際にどのように機能するかです。誰かが光を当ててくれませんか?
loff_t (*llseek) (struct file *, loff_t,int);
これllseek
は、 a を返し、loff_t
3 つのパラメーターを受け取る関数へのポインターであることを示しています。最初のパラメーターは、へのポインターstruct file
です。2 つ目はloff_t
. 3 つ目はint
.
ただし、よく見ると、 の宣言内に表示されていることがわかりますstruct file_operations
。これは、a を返し、これら 3 つのパラメーターを受け取る関数へのポインターであるstruct file_operations
というメンバーが含まれていることを意味します。llseek
loff_t
ところで、関数へのポインターを含む構造体などを使用して C で OOP プログラミングを行う方法を理解していない場合は、カーネル デバイス ドライバーに近づくことはできません。(C++ に精通している場合は、関数へのポインターを持つ構造体が基本的に C でクラスを偽造する方法であることを理解してください。)