2016-10-08 3 views
0

私はLinuxのソースコードを見ていて、writeまたはioctlがデバイスノードで実行されたときに取ったパスを把握しようとしています。私はどのように正確にどこに関数のポインタの構造体が呼び出されるのか知りたいと思います。私はソースコード内のfops構造体への参照を見つけることができませんでした。"write"と "ioctl"をfopの中に置く

誰でも私にこれに関する詳細を教えてください/正しい方向に私を指摘できますか?

答えて

1

特定のサブシステムによって異なります。例としてファイルシステムを取り上げると、異なるファイルシステムのどれかをチェックすることができます。私は最近調べてきたので、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と呼ばれるが。名前は自明です。これらのファイルの中には、readwriteおよびunlocked_ioctl(BKLロックを保持していないioctl)の実装があります。

同様に、異なるドライバのfile_operationsのgrepをdrivers/にすることができます。多くのドライバがそれらを実装しています。

関連する問題