링크 보고 싶을 때 -i 붙이기
ls -ali unix*
하드 링크
- 파일에 접근할 수 있는 파일명 새로 생성함
- 기존 파일과 동일한 inode 사용 (inode 공유)
- 생성하면 inode에 저장된 링크 개수가 증가함
- 삭제 시 링크 개수만 줄어듬
#include <unistd.h>
int link(const char *existion, const char *new);
int main(){
struct stat buf;
stat("filename",&buf);
link("filename", "filename2");
//filename의 하드링크 filename2 생성
stat("filename",&buf);
printf("link count = %d",(int)buf.st_nlink);
}
심볼릭 링크
- 기존 파일에 접근 가능한 다른 파일 만듬
- 다른 inode 사용, 기존 파일의 경로 저장함
- 원본 삭제 시 링크가 깨짐
심볼릭 링크 생성 - symlink
#include <unistd.h>
int symlink("const char *name1, const char *name2);
int main(){
symlink("unix.txt", "unix.sym");
}
심볼릭 링크 정보 검색 - lstat
- sym link의 data 값 출력
- 심볼릭 링크를 stat으로 검색하면 원본 파일에 대한 정보가 검색됨
#include <sys/types.h>
#include <sys/stat.h>
int lstat(const char *path, struct stat *buf);
int main(){
struct stat buf;
lstat("unix.sym",&buf);
printf("link count = %d",(int)buf.st_nlink);
}
심볼릭 링크 내용 읽기 - readlink
- 심볼릭 링크 자체의 데이터 읽기 위해 사용
unix.txt가 저장되어 있음 (unix.txt의 심볼릭 링크라서)
#include <unistd.h>
ssize_t readlink(const char *restrict path, char *restrict buf, size_t bufsize);
int main(){
char buf[BUFSIZ];
int n;
n = readlink("unix.sym",buf, BUFSIZ);
buf[n] = '\0';
printf("readlink = %s",buf);
}
원본 파일 경로 읽기 - realpath
- 심볼릭 링크가 가리키는 원본 파일의 실제 경로명 알고 싶을 때 사용
#include <stdlib.h>
char *realpath(const char *restrict file_name, char *restrict resolved_name);
int main(){
char buf[BUFSIZ];
realpath("unix.sym", buf);
printf("realpath = %s",buf);
}