システムプログラム(第8週): リンクと名前


電子・情報工学系/システム情報工学研究科CS専攻
新城 靖
<yas@is.tsukuba.ac.jp>

このページは、次の URL にあります。
http://www.coins.tsukuba.ac.jp/~syspro/2005/No8_files/link.html
あるいは、次のページから手繰っていくこともできます。
http://www.coins.tsukuba.ac.jp/~syspro/2005/
http://www.coins.tsukuba.ac.jp/~yas/

リンクと名前

実リンクとシンボリックリンク

UNIXでは、ファイル名は、木構造(グラフ構造)の枝(リンク)に付いている。 UNIXでは、ファイルの名前には、次の2種類がある。 本名は、ファイルの寿命と関係している。普通のファイルは、本名の数 (リンク数)は、1である。複数の本名を持っているファ イルもある。全部の本名が消えるとファイルの実体が消える。

次は、3つの実リンクを持っているファイルの例である。

% ls -li /usr/bin/{yppasswd,ypchsh,ypchfn} [←]
1089359 -r-xr-xr-x    3 root     root        16988 Feb 27  2001 /usr/bin/ypchfn
1089359 -r-xr-xr-x    3 root     root        16988 Feb 27  2001 /usr/bin/ypchsh
1089359 -r-xr-xr-x    3 root     root        16988 Feb 27  2001 /usr/bin/yppasswd
% []
1つのファイルの実体を、3つの名前でアクセスできる。どれか1つの名前で も残っている限り、ファイルの実体は残る。全ての名前が消された時に ファイルの実体も消される。

次は、1つの実リンクと2つのシンボリック・リンクを持っているファイルの 例である。

% ls -li /usr/bin/{mdir,mcopy,mtools} [←]
1088204 lrwxrwxrwx    1 root     root            6 Feb 24 07:18 /usr/bin/mcopy -> mtools
1088209 lrwxrwxrwx    1 root     root            6 Feb 24 07:18 /usr/bin/mdir -> mtools
1088317 -rwxr-xr-x    1 root     root       139132 Jan 10  2001 /usr/bin/mtools
% []

mtools が消されると、ファイルの実体が消される。mdirmcopy が消されても、ファイルの実体はそのままである。

シンボリック・リンクは、内部的には別のファイルの名前(シンボル)を含ん でいる特殊なファイルである。open() などのシステムコールでは、自動的に リンクの先の名前に置き換えられる。

シンボリック・リンクは、symlink() システム・コールで作成することができ る。

ディレクトリの実リンク

ディレクトリを stat(2) で調べると、リンク数が2以上になっている。 "." と 子ディレクトリの ".." の分だけ増えている。

リンク数の増減

本名は、open(), creat(), mkdir() の時に作られる。それ以外に、link() シ ステム・コールで増やすことができる。リンクを減らすには、unlink() シス テム・コールを使う。リンクが1つしかないファイルに unlink() を行うと、 ファイルが削除される。

unlink() システムコールは、普通、一般ユーザでは普通のファイルかシンボ リックリンクに対してしか使えない。ディレクトリに対する実リンクは、 mkdir() や rmdir() の時にシステムが自動的に調整する。


Last updated: 2005/06/11 20:28:16
Yasushi Shinjo / <yas@is.tsukuba.ac.jp>