링크 파일 생성
링크(Link)는 같은 파일이나 디렉터리에 여러 이름으로 접근할 수 있게 하는 새로운 이름을 말한다.
링크 기능을 이용하면 이전 시스템과의 호환성을 유지하거나, 경로가 복잡한 파일에 간단한 경로를 제공하는 등 편의성을 높일 수 있다.
구체적인 예시로, 루트 디렉터리 (/) 아래의 lib 디렉터리는 예전 시스템과의 호환을 위해 필요한데,
현재는 실제 디렉터리가 있는게 아니라 /usr/lib 디렉터리에 대한 심벌릭 링크로 유지하고 있다.
링크는 하드 링크와 심벌릭 링크 두 가지가 있으며, 둘 다 ln명령으로 생성한다.
프로그램에서도 함수를 사용해 하드 링크와 심벌릭 링크를 생성할 수 있다.
1. 하드 링크 (Hard Link)
- 하드 링크(Hard Link)는 파일에 접근할 수 있는 파일명을 새로 생성하는 것으로, 기존 파일과 동일한 inode를 사용한다.
- 하드 링크를 생성하면 inode에 저장된 링크 개수(Link Count)가 증가한다.
하드 링크 생성 : link(2)
#include <unistd.h>
int link(const char *oldpath, const char *newpath);
oldpath : 기존 파일의 경로, newpath : 새로 생성할 링크의 경로
하드 링크는 같은 파일 시스템에 있어야 하므로 두 경로를 반드시 같은 파일 시스템으로 지정해야한다.
link()함수는 수행에 성공하면 0을, 실패하면 -1을 반환한다.
2. 심벌릭 링크 (Symbolic link)
심벌릭 링크(Symbolic Link)는 기존 파일에 접근할 수 있는 다른 파일을 만든다.
기존 파일과 다른 inode를 사용하며, 기존 파일의 경로를 저장한다.
심벌릭 링크의 정보를 검색할 때에는 lstat()함수를 사용하며, 내용은 readlink() 함수로 읽을 수 있다.
(1) 심벌릭 링크 생성 : symlink(2)
#include <unistd.h>
int symlink(const char *target, const char *linkpath);
target : 기존 파일의 경로, linkpath : 새로 생성할 심벌릭 링크의 경로
심벌릭 링크는 기존 파일과 다른 파일 시스템에도 생성할 수 있다.
(2) 심벌릭 링크의 정보 검색 : lstat(2)
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
int lstat(const char *pathname, struct stat *statbuf);
pathname : 심벌릭 링크의 경로, statbuf : 새로 생성할 링크의 경로
stat()함수로 심벌릭 링크를 검색하면 원본 파일에 대한 정보가 검색된다. 심벌릭 링크 자체의 파일 정보는 lstat() 함수로 검색할 수 있다.
(3) 심벌릭 링크의 내용 읽기 : readlink(2)
#include <unistd.h>
ssize_t readlink(const char *pathname, char *buf, size_t bufsiz);
pathname : 심벌릭 링크의 경로, buf : 읽어온 내용을 저장할 버퍼, bufsiz : 버퍼의 크기
Vim editor로 심벌릭 링크를 열면 원본 파일이 열린다. 심벌릭 링크 자체 데이터블록을 읽으려면 readlink() 함수를 사용한다.
(4) 심벌릭 링크 원본 파일의 경로 읽기 : readpath(3)
#include <limits.h>
#include <stdlib.h>
char *realpath(const char *path, char *resolved_path);
path : 심벌릭 링크의 경로명, resolved_path : 경로명을 저장할 버퍼 주소
realpath() 함수는 수행에 성공하면 실제 경로명이 저장된 곳을, 실패하면 NULL 포인터를 반환한다.
3. 링크 끊기
링크 끊기란 파일 시스템에서 링크를 삭제하는 것으로, unlink() 함수를 사용해 실행한다.
#include <unistd.h>
int unlink(const char *pathname);
pathname : 삭제할 링크의 경로
unlink() 함수는 호출에 성공하면 0을 반환한다.
'Fundamental of Software Develop > : : Linux System Programming' 카테고리의 다른 글
Linux System Programming : 파일 접근 권한 제어 (0) | 2023.11.10 |
---|---|
Linux System Programming: 파일 정보 검색 (0) | 2023.11.10 |
디렉터리 내용 읽기 (0) | 2023.11.09 |
디렉터리 관리하기 (위치 검색, 이름 변경, 이동) (0) | 2023.11.09 |
디렉터리 생성과 삭제 : mkdir(), rmdir() (0) | 2023.11.09 |