파일 접근 권한 변경
umask
#include <sys/types.h>
#include <sys/stat.h>
mode_t umask(mode_t newmask);
파일이 이미 생성된 후엔 umask로 바꿀 수 없다. 파일이 생성될 때 바꿀 수 있음.
...umask 에 대해선 좀 더 알아봐야 할 것 같다.
링크
링크의 정의
- 이미 있는 파일이나 디렉터리에 접근할 수 있는 새로운 이름을 의미
- 같은 파일이나 디렉터리지만 여러 이름으로 접근할 수 있게 하는 것
- 심벌릭 링크와 하드 링크로 나뉨
- 링크 기능을 이용하면 사용자 편의성을 높일 수 있음
- ex) 이전 시스템과의 호환성을 유지, 경로가 복잡한 파일에 간단한 경로를 제공
하드 링크
- 파일에 접근할 수 있는 파일명을 새로 생성하는 것으로, 기존 파일과 동일한 inode를 사용
- 하드 링크를 생성하면 inode에 저장된 링크 개수가 증가
ln text.txt test.ln1
이렇게 하면 text.txt와 inode까지 동일한 test.ln1이 만들어진다.
하드링크로 inode를 공유중인 파일 하나를 삭제해도 다른 하드 링크를 하고 있는 파일은 삭제되지 않는다. 모든 하드 링크 파일이 삭제되어야 삭제된다.
연결되어있는 링크 숫자만큼 링크 ++.(원본 파일 포함)
심벌릭 링크
- 기존 파일에 접근할 수 있는 다른 파일을 만듦
- 기존 파일과 다른 inode를 사용하며, 기존 파일의 경로를 저장
ln -s test.ln1 test.sym1
심벌릭 링크의 원본 파일을 삭제하면 링크가 깨진다.
하드 링크 생성 : link()
int link(const char oldpath, const char newpath);
oldpath
: 기존 파일의 경로
newpath
: 새로 생성할 링크의 경로
심벌릭 링크 생성 : symlink()
int symlink(const char target, const char linkpath);
target
: 기존 파일의 경로
linkpath
: 새로 생성할 심벌릭 링크의 경로
허가 비트 lrwxrwxrwx 로 만들어짐.
심벌릭 링크의 정보 검색 : lstat()
int lstat(const char pathname, struct stat statbuf);
pathname
: 심벌릭 링크의 경로
statbuf
: 새로 생성할 링크의 경로
심벌릭 링크의 내용 읽기 : readlink()
ssize_t readlink(const char pathname, char buf, size_t bufsiz);
pathname
: 심벌릭 링크의 경로
buf
: 읽어온 내용을 저장할 버퍼
bufsiz
: 버퍼의 크기