4.3 chmod, fchmod
이번에는 존재하는 파일에 접근 권한을 변경하는 chmod와 fchmod 함수를 살펴봅시다.
#include <sys/types.h> #include <sys/stat.h> int chmod(const char *pathname, mode_t mode); 반환 값: 실패 시 -1, 성공 시 0 int fchmod(int fd, mode_t mode); 반환 값: 실패 시 -1, 성공 시 0 |
chmod나 fchmod로 파일의 접근 권한을 변경하기 위해서는 선행 조건으로 유효 사용자 ID가 파일의 쇼유자이거나 루트의 권한을 갖고 있어야 합니다.
두 개의 함수 모두 두 번째 입력 매개 변수는 설정할 모드로 다음처럼 매크로 상수로 정의하고 있습니다.
S_IRUSR: 사용자 읽기 권한
S_IWUSR: 사용자 쓰기 권한
S_IXUSR: 사용자 실행 권한
S_IRXWU: 사용자 읽기, 쓰기, 실행 권한
S_IRGRP: 그룹 읽기 권한
S_IWGRP: 그룹 쓰기 권한
S_IXGRP: 그룹 실행 권한
S_IRWXG: 그룹 읽기, 쓰기, 실행 권한
S_IROTH: 나머지 읽기 권한
S_IWOTH: 나머지 쓰기 권한
S_IXOTH: 나머지 실행 권한
S_IRWXO: 나머지 읽기, 쓰기, 실행 권한
S_ISUID set user id
S_ISGID set group id
S_ISVTX saved sticky bit
mode는 매크로 상수를 사용할 수도 있지만 8진수 세 자리로 간단히 권한을 부여할 수 있습니다. 8진수는 맨 앞 자리는 사용자, 두 번째는 그룹, 세 번째는 나머지를 의미하며 4는 읽기, 2는 쓰기 1은 실행 권한을 의미합니다. 따라서 0664는 사용자과 그룹은 읽기, 쓰기를 나머지에는 읽기 권한을 의미합니다.
다음은 파일의 권한을 변경하는 예제 코드입니다.
/*********************************************************************** * ex_chmod.c * * example source - change file access mode * ***********************************************************************/ #include <stdio.h> #include <unistd.h> int main(int argc,char **argv) { if(argc != 3) { fprintf(stderr,"usage: %s [file name]\n",argv[0]); return 1; } if(access(argv[1],F_OK)!=0) { printf("%s is not existed\n",argv[1]); return 1; } if(chmod(argv[1],atoi(argv[2]))!=0) { printf("fail change mode\n"); } else { printf("success change mode\n"); } return 0; } |
10진수 438은 8진수로 0664입니다.
[그림 4.4] ex_chmod 실행 화면
'프로그래밍 기술 > 리눅스(Unix) 시스템 프로그래밍' 카테고리의 다른 글
파일 삭제, unlink, remove, rmdir 함수 (0) | 2017.07.25 |
---|---|
물리적 파일에 접근하기 위한 경로, 하드 링크(link)와 심볼릭 링크(symlink) (2) | 2016.11.03 |
소유자 ID 및 소유 그룹 ID 변경할 때 chown, fchown (2) | 2016.11.03 |
umask 값을 설정하여 파일 접근 권한 모드를 안전하게 (1) | 2016.11.02 |
chmod 명령의 또 다른 기능 스티키 비트와 set user id bit (0) | 2016.11.01 |
access 시스템 호출 (1) | 2016.10.31 |
stst 시스템 호출로 파일 종류 확인 (1) | 2016.10.31 |
파일의 상태, fstat, lstat, stat 시스템 호출 (1) | 2016.10.31 |
[리눅스/유닉스 시스템 프로그래밍] fnctl, sync, fsync (0) | 2016.04.05 |
[리눅스/유닉스 시스템 프로그래밍] dup, dup2 (0) | 2016.04.05 |