Show page source of internal22-139-ディレクトリの生成 #25509

[[PageNavi(internal22-navi)]]

{{{ comment
h2w-title:ディレクトリの生成
}}}
 

= ディレクトリの生成 = #SECTION031090000000000000000

ディレクトリの生成も、基本的にファイルの生成と同様である。vfs sys_mkdir(do_mkdir)関数は、 パス検索(lookup_dentry関数)により親ディレクトリのiノードを求めた後、親ディレクトリのiノードのmkdirオペレーションを呼び出すことにより実現されている。

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

{{{
   ext2_mkdir(親ディレクトリのiノード, 登録するdentry)
      フリーiノードを一つ確保(ext2_new_inode関数)
      iノードの初期化
        - ファイルサイズ(i_sizeメンバ)を0クリア
        - 登録ブロック数(i_blocksメンバ)を0クリア
      ディレクトリブロックの確保(ext2_bread関数を呼び出すことで実現)
      確保したディレクトリブロックに”.”と”..”のエントリを書き込む.
      iノードのリンクカウントを2に初期化
      ◇ディレクトリブロックの遅延書き込み要求(mark_buffer_dirty関数)
      ディレクトリブロックが入っているバッファの解放(brelse関数)
      ◇iノードの遅延書き込み要求(mark_inode_dirty関数)
      このiノードを親ディレクトリに登録(ext2_add_entry関数)
      ディレクトリエントリに、新規作成したディレクトリのiノード番号を書き込む
      ◇親ディレクトリブロックの遅延書き込み要求(mark_buffer_dirty関数)
      if(SYNC属性 ?) {
          ◆親ディレクトリブロックの書き込み(ll_rw_block関数, wait_on_buffer関数)
      }
      親ディレクトリのiノードのリンクカウントを1増やす
      ◇親ディレクトリのiノードの遅延書き込み要求(mark_inode_dirty関数)
      新規作成したディレクトリのdentryとiノードをリンク(d_instantiate関数)
      親ディレクトリブロック用のバッファ解放(brelse関数)
}}}

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

----

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

  *  [internal22-140-問題点,注意点#SECTION031090010000000000000 問題点, 注意点]

----

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

[[PageNavi(internal22-navi)]]