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