Show page source of internal22-130-ファイルの生成 #25499

[[PageNavi(internal22-navi)]]

{{{ comment
h2w-title:ファイルの生成
}}}
 

= ファイルの生成 = #SECTION031020000000000000000

creatシステムコールまたはopenシステムコールにおいてO_CREATが指定された場合、 open_namei()関数がパス検索(lookup_dentry関数)に失敗した場合、指定されたパス名を持つファイルの生成を試みる。ファイルの生成は、親ディレクトリのiノードのcreateオペレーションを呼び出すことにより実現されている。

ext2ファイルシステムの場合は、 ext2_create関数が呼び出される。

{{{
   ext2_create(親ディレクトリのiノード, 登録するdentry)
      フリーiノードを一つ確保(ext2_new_inode関数)
      iノードの初期化
      ◇iノードの遅延書き込み要求(mark_inode_dirty関数)
      このiノードを親ディレクトリに登録(ext2_add_entry関数)
      ディレクトリエントリに、このファイルのiノード番号を書き込む
      ◇ディレクトリブロックの遅延書き込み要求(mark_buffer_dirty関数)
      if(SYNC属性 ?) {
          ◆ディレクトリブロックの書き込み(ll_rw_block関数, wait_on_buffer関数)
      }
      ディレクトリブロック用のバッファ解放(brelse関数)
      新規作成したファイルのdentryとiノードをリンク(d_instantiate関数)
}}}

下に簡単な図で動作を示す。◆は同期書き込み、◇は遅延書き込み、◆と◇の横に書いてある番号は、処理順序を表している。

 [[Embed(internal22-images:img43.gif)]]
 

----

{{{ html
<A NAME="CHILD_LINKS">&#160;</A>
}}}

  *  [internal22-131-問題点#SECTION031020010000000000000 問題点]

----

''(NIS)HirokazuTakahashi [[BR]]2000年06月11日 (日) 22時29分57秒 JST''1

[[PageNavi(internal22-navi)]]