Show page source of internal22-148-シンボリックリンクファイルの生成 #25470

[[PageNavi(internal22-navi)]]

{{{ comment
h2w-title:シンボリックリンクファイルの生成
}}}
 

== シンボリックリンクファイルの生成 == #SECTION0310131000000000000000

シンボリックリンクファイルの作成は、vfs sys_symlink(do_symlink)関数においてlookup_dentry関数を用いて、ファイルを登録する親ディレクトリのiノードを求めた後、そのiノードのsymlinkオペレーションを呼び出すことにより実現されている。ext2ファイルシステムでは、ext_symlink関数が呼び出される。

{{{
   ext2_symlink(親ディレクトリのiノード, 登録するdentry, 登録するパス名)
      フリーiノードを一つ確保(ext2_new_inode関数)
      iノードの初期化
      if(登録するパス名が60文字未満?) {
           iノード中に登録パス名をコピー
      } else {
           ブロックの確保(ext2_bread関数を呼び出すことで実現)
           このブロック中に登録パス名をコピー
           ◇このブロックの遅延書き込み要求(mark_buffer_dirty関数)
           このブロック用のバッファ解放(brelse関数)
      }
      iノードのファイルサイズ情報(i_sizeメンバ)に上記パス名長+1を設定
      ◇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:img51.gif)]]
 

リンク先のパス名が短い場合は、以下のようになる。

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

----

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

  *  [internal22-149-問題点,注意点#SECTION0310131010000000000000 問題点, 注意点]

----

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

[[PageNavi(internal22-navi)]]