symlinkはシンボリックリンクを作成する。
シンボリックリンクが指し示すファイルパス、そしてシンボリックリンク名を指定する。
成功すると0が返る。
$ pwd /home/bg1/project/cloud/github.com/Sample/unixsyscall/symlink/symlink/src/symlink $ vi symlink.c $ mkdir test1 $ cd test1/ $ vi test1.txt $ cat test1.txt ABCDE $
まずは、ディレクトリtest1を作成し、その下にtest1.txtを作成し、文字列を書いておく。
$ cd .. $ ls symlink.c test1 $ gcc symlink.c -o symlink $ ls symlink symlink.c test1 $ ./symlink create test1_symlink success! $ ls symlink symlink.c test1 test1_symlink $
上がってコンパイルしてsymlinkでシンボリックリンクtest1_symlinkを作成。
$ ls -al 合計 36 drwxrwxr-x. 3 bg1 bg1 4096 9月 29 07:19 . drwxrwxr-x. 3 bg1 bg1 4096 9月 29 07:04 .. -rwxrwxr-x. 1 bg1 bg1 18440 9月 29 07:18 symlink -rw-rw-r--. 1 bg1 bg1 856 9月 29 07:16 symlink.c drwxrwxr-x. 2 bg1 bg1 4096 9月 29 07:18 test1 lrwxrwxrwx. 1 bg1 bg1 15 9月 29 07:19 test1_symlink -> test1/test1.txt $ cat test1_symlink ABCDE $ vi test1_symlink $ cat test1_symlink ABCDE XYZ $ cat test1/test1.txt ABCDE XYZ $
test1_symlinkがtest1/test1.txtを指しているのがわかるので、test1_symlink側を修正しても、test1/test1.txt側に反映されている。
$ mkdir test2 $ ls symlink symlink.c test1 test1_symlink test2 $ mv test1/test1.txt test2/test1.txt $ ls test2/ test1.txt $ cat test1_symlink cat: test1_symlink: No such file or directory $ ls -al 合計 40 drwxrwxr-x. 4 bg1 bg1 4096 9月 29 07:22 . drwxrwxr-x. 3 bg1 bg1 4096 9月 29 07:04 .. -rwxrwxr-x. 1 bg1 bg1 18440 9月 29 07:18 symlink -rw-rw-r--. 1 bg1 bg1 856 9月 29 07:16 symlink.c drwxrwxr-x. 2 bg1 bg1 4096 9月 29 07:22 test1 lrwxrwxrwx. 1 bg1 bg1 15 9月 29 07:19 test1_symlink -> test1/test1.txt drwxrwxr-x. 2 bg1 bg1 4096 9月 29 07:22 test2 $
ディレクトリtest2を作成して、そこにtest1.txtを移動すると、test1_symlinkにアクセスしようとしても、実体であるtest1.txtが存在しないのでエラーになる。
シンボリックリンクは実体を指さないので、リンク先はそのままである。
Sample/unixsyscall/symlink/symlink/src/symlink at master · bg1bgst333/Sample · GitHub