반응형
chmod(2)
#include <sys/stat.h>
int chmod(const char *path, mode_t mode);
파일에 대해 owner, group, other user에 대한 읽기, 쓰기, 실행권한을 변경합니다. 디렉토리에 대해 owner, group, other user에 대한 읽기, 쓰기, 탐색권한을 변경합니다.
파라미터
path
- 권한을 변경하려는 파일 또는 디렉토리에 대한 full path 또는 상대 path
mode
- 설정할 접근 권한 값으로 아래의 상수들에 대해 bit or 연산으로 조합할 수 있습니다.
S_ISUID (04000) set-user-ID (set process effective user ID on execve(2))
S_ISGID (02000) set-group-ID (set process effective group ID on execve(2))
S_ISVTX (01000) sticky bit
- 디렉토리에 sticky bit가 설정되면, 파일의 권한 777이라도 파일의 owner외에는 삭제못함
S_IRWXU : (00700) - owner에 대한 읽기, 쓰기, 실행권한 모두 설정
S_IRUSR : (00400) - owner에 대한 읽기 권한
S_IWUSR : (00200) - owner에 대한 쓰기 권한
S_IXUSR : (00100) - owner에 대한 실행 권한
S_IRWXG : (00070) - group에 대한 읽기, 쓰기, 실행권한 모두 설정
S_IRGRP : (00040) - Group에 대한 읽기 권한
S_IWGRP : (00020) - Group에 대한 쓰기 권한
S_IXGRP : (00010) - Group에 대한 실행 권한
S_IRWXO : (00007) - Other에 대한 읽기, 쓰기, 실행권한 모두 설정
S_IROTH : (00004) - Other에 대한 읽기 권한
S_IWOTH : (00002) - Other에 대한 쓰기 권한
S_IXOTH : (00001) - Other에 대한 실행 권한
RETURN
0
- 정상적으로 파일 또는 디렉토리의 권한을 변경하였습니다.
-1
- 오류가 발생하였으며, 상세한 오류 내용 errno 전역변수에 설정되었습니다.
EACCES : filename을 구성하는 directory 중에서 search permission이 없음.
(디렉토리의 권한 중 rwx 중에서 x권한)
EFAULT : path 변수의 데이터 주소 접근할 수 없는 메모리 영역입니다.
EIO : I/O 오류가 발생하였습니다.
ELOOP : 디렉토리를 찾는 데, symbolic link가 너무 많이 걸려 있음.
ENAMETOOLONG : path가 너무 긴 문자열입니다.
ENOENT : 없는 파일입니다.
ENOMEM : kernel 메모리가 부족합니다.
ENOTDIR : path를 구성하는 이름중에서 directory가 아닌 것이 있습니다.
EPERM : 변경 권한이 없습니다.
EROFS : path가 read only 파일 시스템에 있습니다.
활용 예제
Sample
#include <sys/stat.h>
.....
if(chmod(path, 0644) == -1) {
fprintf(stderr, "chmod error: %s\n", strerror(errno));
return -1;
}
......
see also :
반응형
'C언어 header > sys | stat.h' 카테고리의 다른 글
mkdir(2) - directory 생성 (0) | 2019.10.04 |
---|---|
umask(2) - 파일 및 디렉토리의 생성권한을 통제하는 mask값 설정 (0) | 2019.09.29 |
fchmod(2) - 파일의 접근 권한(permission) 변경 (0) | 2019.09.29 |