stat()
를 사용한다.int stat (const char *filename, struct stat *buf);
int fstat (int fd, struct stat *buf);
int lstat (const char *filename, struct stat *buf)
S_ISREG()
S_ISDIR()
S_ISCHR()
S_ISBLK()
S_ISFIFO()
S_ISSOCK()
S_ISLINK()
chmod()
는 일전에도 배웠던 함수로 이는 권한을 변경할 때 사용되는 함수다.#include <sys/stat.h>
#include <sys/types.h>
int chmod (const char *path, mode_t mode );
int fchmod (int fd, mode_t mode );
#include <sys/types.h>
#include <utime.h>
int utime (const char *filename, const struct utimbuf *times );
chown()
는 일전에도 배웠던 함수로 이는 소유자를 변경할 때 사용되는 함수다.#include <sys/types.h>
#include <unistd.h>
int chown (const char *path, uid_t owner, gid_t group );
int fchown (int filedes, uid_t owner, gid_t group );
int lchown (const char *path, uid_t owner, gid_t group );
opendir()
: 디렉터리 열기 함수readdir()
: 디렉터리 읽기 함수#include <sys/types.h>
#include <dirent.h>
DIR *opendir (const char *path);
struct dirent *readdir(DIR *dp);
mkdir()
시스템 호출#include <sys/types.h>
#include <sys/stat.h>
int mkdir (const char *path, mode_t mode );
rmdir()
시스템 호출#include <unistd.h>
int rmdir (const char *path);
rm
≠ rmdir
link()
함수를 사용한다.#include <unistd.h>
int link(char *existing, char *new);
int unlink(char *path);
하드링크는 원본파일과 동일한 inode를 직접적으로 가리킨다. 따라서 원본이 삭제되더라도 원본과 동일한 내용의 파일을 하나 더 가지고 있기 때문에 자원을 공유하면서 데이터를 안전하게 관리할 때 주로 사용된다.
하지만 하드링크는 파일 링크만 가능하며 디렉터리 링크는 불가능하다.
하드링크의 단점을 보완하기 위해서 심볼릭링크가 등장했다. 심볼릭링크는 실제 파일의 경로명 자체를 저장하고 있는 링크다. 심볼릭링크는 파일이나 디렉터리를 가리키는 포인터를 가져 둘 다 참조가 가능하다. 하지만 심볼릭링크는 원본이 삭제된 경우 해당 파일로 갈 수 있는 경로명을 가지는 심볼릭링크가 있다 하더라도 데이터가 삭제되었기 때문에 원본이 삭제되면 해당 데이터에 접근하는 것은 불가능하다.
#include <sys/file.h>
int flock(int fd, int operation)
LOCK_SH
: 공유 잠금으로 한 개 이상의 프로세스들이 파일에 대한 공유 잠금이 가능하다.LOCK_EX
: 배타 잠금으로 한번에 하나의 프로세스만이 파일에 대한 배타 잠금을 할 수 있다.LOCK_UN
: 파일에 걸려 있는 잠금을 해제한다.LOCK_NB
: 파일에 잠금이 걸려 있으면 기다리지 않고 반환하며 이런 경우에 errno※ 공유 잠금 : 데이터를 읽을 때 사용되는 잠금이다.
※ 배타 잠금 : 데이터를 변경할 때 사용하며 트랜잭션이 완료될 때까지 유지된다.
#include <sys/types.h>
#include <unistd.h>
#include <fcntl.h>
int fcntl(int fd, int cmd, struct flock *lock);
// fd : file descriptor(파일 디스크립터)
// cmd : 옵션
// flock구조체 : 잠금 종류, 프로세스 ID, 잠금 위치
#include <unistd.h>
int lockf(int fd, int cmd, off_t len);