각 프로세스는 생성될 때 file creation mask를 가짐
filedes = open(pathname, O_WRONLY|O_CREAT, mode);
filedes = open(pathname, O_WRONLY|O_CREAT, (~mask) & mode);
시스템 상에서 group에대한 write, others의 write 권한을 없앰 그런데 꼭 써야할 경우가 생길수 있음 -> umask
#include <sys/stat.h>
mod_t umask(mod_t cmask);
umask 함수는 file creation mask를 설정해줌. 리턴값은 이전 file creation mask
mode_t lodmask;
oldmask = umask(022) //file creation mask를 022로 설정
//(others,group의 write권한을 막음) oldmask에는 이전 creation mask 저장
#include <unistd.h>
int access(const char *pathname, int amode);
access는 ruid,rgid를 통해 pathname의 access 권한을 check한다.
성공 return 0, 실패 return -1
amode:
#include <unistd.h>
int chmod(const char *pathname, mode_t newmod);
존재하고 있는 파일의 모드를 바꿈
성공 return 0, 실패 return -1
파일의 소유자나 super user만이 사용할 수 있음
#include <unistd.h>
int chown(const char *pathname, uid_t owner_id, gid_t group_id);
소유자와 소유그룹을 바꾸는 system call
성공 return 0, 실패 return -1
Arguments:
이 시스템콜이 CALL되면 S_ISUID, S_ISGID 권한은 turned off됨
파일에 여러 이름을 부여하는 방법 ex) 바로가기 in window system
모든 파일은 i-node라는 structure로 관리
i-node 0,1은 사용 x

hard link는 file에 대한 직접적인 포인터
Link count는 디렉토리에서 i-node로 향하는 포인터에 갯수
Link count가 0이 돼야지만 file은 삭제될 수 있다.
file들 끼리 cross될 수 없음

symbolic link는 file에 대한 간접적인 포인터
실제 symbolic link의 contents는 그것과 연결된 file
파일 시스템 제한이 없다. (파일들끼리 cross가능)

#include <unistd.h>
int link(const char *original_path, const char *new_path);
새로운 디렉토리를 만들고,link count를 증가시킨다.(return 0 on success, -1 on error)
오직 슈퍼유저만 directory(file이 아닌)에 대한 하드링크를 만들 수 있다.

argument -> 같은 파일 시스템 내에 있는 path name으로 줘야한다.
#include <unistd.h>
int unlink(const char *pathname);
#include <stdio.h>
int remove(const char *pathname);
#include <stdio.h>
int rename(const char *oldname, const char *newname);

#include <unistd.h>
int symlink(const char *realname, const char *symname);
#include <unistd.h>
int readlink(const char *sympath, char *buffer, size_t bufsize);