open
man 2 open で見れるやつ。テキストによると
カーネルが呼び出しエントリポイントを決定する方法を理解するには、fs/open.c の sys_open() を調べてみよう。
とある。こりゃまたハードル高い事を仰せでらっしゃる。
ええと
asmlinkage long sys_open(const char __user *filename, int flags, int mode)
から
long do_sys_open(int dfd, const char __user *filename, int flags, int mode)
が呼ばれてさらにその中で
static struct file *do_filp_open(int dfd, const char *filename, int flags, int mode)
が呼ばれる。ここまでは open.c の中の世界??
で、ここから namei.c の
int open_namei(int dfd, const char *pathname, int flag, int mode, struct nameidata *nd)
がナニ。ココがポイントな模様。
this is in fact almost the whole open-routine.
とありますな。結構強敵そげ。とりあえずデバドラ云々の前に寄り道する価値はありそげ。ちなみに LKHJ のポインタは以下
ちょっと平日は微妙。
む
わしが持ってる詳解 Linux カーネルの 12.4 パスの検索以降に記述がある模様ですが、2.6 な実装とは微妙な違いがある模様。あと open() についても 12.5.1 に記述あり。
カギは inode ??