私はLinuxのソースコードを見ていて、write
またはioctl
がデバイスノードで実行されたときに取ったパスを把握しようとしています。私はどのように正確にどこに関数のポインタの構造体が呼び出されるのか知りたいと思います。私はソースコード内のfops構造体への参照を見つけることができませんでした。"write"と "ioctl"をfopの中に置く
誰でも私にこれに関する詳細を教えてください/正しい方向に私を指摘できますか?
私はLinuxのソースコードを見ていて、write
またはioctl
がデバイスノードで実行されたときに取ったパスを把握しようとしています。私はどのように正確にどこに関数のポインタの構造体が呼び出されるのか知りたいと思います。私はソースコード内のfops構造体への参照を見つけることができませんでした。"write"と "ioctl"をfopの中に置く
誰でも私にこれに関する詳細を教えてください/正しい方向に私を指摘できますか?
特定のサブシステムによって異なります。例としてファイルシステムを取り上げると、異なるファイルシステムのどれかをチェックすることができます。私は最近調べてきたので、FATを取ってみましょう。実装はfs/fat/
ディレクトリにあります。そのディレクトリにgit grep file_operations
を実行すると、我々が探しているまさに私たちを与える:
$ git grep file_operations
dir.c:const struct file_operations fat_dir_operations = {
fat.h:extern const struct file_operations fat_dir_operations;
fat.h:extern const struct file_operations fat_file_operations;
file.c:const struct file_operations fat_file_operations = {
inode.c: inode->i_fop = &fat_file_operations;
のでfile_operations
の二つの定義がある - dir.cで1 fat_dir_operations
と呼ばれ、FILE.C内の他のfat_file_operations
と呼ばれるが。名前は自明です。これらのファイルの中には、read
、write
およびunlocked_ioctl
(BKLロックを保持していないioctl)の実装があります。
同様に、異なるドライバのfile_operations
のgrepをdrivers/
にすることができます。多くのドライバがそれらを実装しています。