linkは、ファイルのハードリンクを作成するのに使う。
シンボリックリンクとハードリンクの違い - Qiita
シンボリックリンクの使い方と落とし穴 - Qiita
Manpage of LINK
ファイルの別名を作成する(ハード・リンク) | C言語入門講座
link.cで、
"test1/test1.txt"をリンク先として、"test1_hlnk"というハードリンクを作成。
ハードリンクは元のファイルと同じiノードを指すので、ファイルが移動しても削除されても、それらの情報はiノードに反映される。
$ mkdir test1
$ cd test1/
$ vi test1.txt
$ cat test1.txt
ABCDE
$
test1ディレクトリの下にtest1.txtを作成し、"ABCDE"という内容にする。
上のディレクトリに戻って、
$ vi link.c
$ gcc link.c -o link
$ ls
link link.c test1
$ ./link
create test1_hlnk success!
$ ls
link link.c test1 test1_hlnk
$
link.cを作成し、上記のプログラムを書いた後、コンパイルして、実行すると、test1_hlnkが作成される。
$ ls -li
合計 24
3934494 -rwxrwxr-x. 1 bg1 bg1 8728 1月 11 13:06 link
3934496 -rw-rw-r--. 1 bg1 bg1 787 1月 11 13:05 link.c
4066613 drwxrwxr-x. 2 bg1 bg1 4096 1月 11 12:51 test1
4066615 -rw-rw-r--. 2 bg1 bg1 6 1月 11 12:51 test1_hlnk
$ ls -li test1
合計 4
4066615 -rw-rw-r--. 2 bg1 bg1 6 1月 11 12:51 test1.txt
$
test1_hlnkとtest1/test1.txtのiノード番号が一緒。
なので、
$ vi test1_hlnk
$ cat test1_hlnk
ABCDE
XYZ
$ cat test1/test1.txt
ABCDE
XYZ
$
このように変更が反映されるし、
$ mkdir test2
$ mv test1/test1.txt test2
$ ls test1
$ ls test2
test1.txt
$ cat test1_hlnk
ABCDE
XYZ
$ cat test2/test1.txt
ABCDE
XYZ
$
test2ディレクトリを作成して、test1/test1.txtをtest2の下に移動しても、test1_hlnkでtest2/test1.txtにアクセスできる。
Sample/unixsyscall/link/link/src/link at master · bg1bgst333/Sample · GitHub