Linuxカーネルに関する技術情報を集めていくプロジェクトです。現在、Linuxカーネル2.6解読室の第2章までを公開中。
ファイルのクローズシステムコール vfs sys_close関数では、ファイルディスクリプタに対応したファイル構造体をファイルディスクリプタテーブルから登録を抹消する。その後、close_fp関数を用いてファイルのクローズ処理を実行する。
forkしたプロセス間ではファイル構造体を共有しているため、本当のクローズ処理が行われるのは、最後のプロセスがクローズを呼び出したときである。
クローズ処理は、明示的なシステムコール呼び出し以外にも、プロセスの終了時やexec時にも呼び出される。
close_fp(ファイル構造体, スレッドグループID) ファイル構造体に登録されているflushオペレーションを呼び出す。 if(ファイルがロックされていたら) ロックを解除する(locks_remove_posix関数) ファイル構造体の解放(fput関数) fput(ファイル構造体) ファイル構造体の参照数を1減らす if(ファイル参照数が0になったら) { ファイルオペレーションreleaseを呼び出す。 dentryの解放(dput関数) ファイルロックの解除(locks_remove_flock関数) ファイル構造体の解放(remove_filp関数, inser_file_free関数) }
ext2ファイルシステムの通常ファイルでは、ファイルオペレーションreleaseには、ext2_discard_prealloc関数が登録されている。これは先行確保したファイルのデータブロックをフリービットマップに返却する関数である。ext2ファイルシステムのディレクトリ、シンボリックリンクファイルにはオペレーションは登録されていない。
(NIS)HirokazuTakahashi
2000年06月11日 (日) 22時29分57秒 JST1
[ページ情報]
更新日時: 2008-08-27 14:45:04, 更新者: hiromichi-m
[権限]
表示:無制限, 編集:ログインユーザ, 削除/設定:メンバー