0

Linux デバイス ドライバーの開発を始めたばかりですが、この種のコードをよく見かけますが、正確に何をしているのか理解できません。

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

llseek メソッドは、ファイル内の読み書き位置を変更するために使用されます。loff_t は長いオフセット パラメータです。私が理解していないのは、上記の構文とそれが実際にどのように機能するかです。誰かが光を当ててくれませんか?

4

1 に答える 1

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

これllseekは、 a を返し、loff_t3 つのパラメーターを受け取る関数へのポインターであることを示しています。最初のパラメーターは、へのポインターstruct fileです。2 つ目はloff_t. 3 つ目はint.

ただし、よく見ると、 の宣言内に表示されていることがわかりますstruct file_operations。これは、a を返し、これら 3 つのパラメーターを受け取る関数へのポインターであるstruct file_operationsというメンバーが含まれていることを意味します。llseekloff_t

ところで、関数へのポインターを含む構造体などを使用して C で OOP プログラミングを行う方法を理解していない場合は、カーネル デバイス ドライバーに近づくことはできません。(C++ に精通している場合は、関数へのポインターを持つ構造体が基本的に C でクラスを偽造する方法であることを理解してください。)

于 2012-07-06T10:39:59.887 に答える