link

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