ファイルのオープン

ファイルのオープン処理は、 vfs sys_open関数が行う。sys_open関数はファイルディスクリプタの確保を行った後、filp_open関数を呼び出す。

指定したパス名にファイルが存在しないとき、ファイル生成指定であればopne_namei関数の中で自動的にファイル生成が行われる。詳しくは 「ファイルの生成」の方を参照のこと。

   sys_open(パス名)
         ファイルディスクリプタ確保(get_unused_fd関数)
         ファイル構造体を確保し、ファイルをopenする(filp_open関数)
         ファイル構造体をファイルディスクリプタテーブルに登録(fd_install関数)

   filp_open(パス名)
         パス名に対応したdentryを求める(open_namei関数)
         dentry_open()

   dentry_open(dentry, マウント情報)
         空きファイル構造体を獲得(get_empty_filp関数)
         ファイル構造体と上記dentryをリンク
         ファイル構造体のf_opメンバにファイル操作テーブルを登録
         ファイルのopenオペレーションを呼ぶ

ファイルのopenオペレーションは、ext2ファイルシステムでは、通常ファイルの場合ext2_open_file関数が呼び出される。ext2_open_file関数はファイルサイズに関するエラーチェックを行うのみでそれ以外の処理は何も行っていない。ext2ファイルシステム上のディレクトリやシンボリックリンクファイルには、オペレーションそのものが登録されておらず、特に何も処理は行わないようになっている。

パイプやデバイスファイルの場合、iノードの実体がext2ファイルシステム上にあるだけで、open_namei関数にてiノードを確保した後は、ext2ファイルシステムとは無関係に動作する。


(NIS)HirokazuTakahashi
2000年12月09日 (土) 23時55分06秒 JST
1