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 :

    File 속성 정보 및 파일 관리 Library

    Directory 정보 조회 및 관리 Library

    System Call File I/O Library

    Stream File I/O Library

 

블로그 이미지

사용자 자연&사람

행복한 개발자 programmer since 1995.

댓글을 달아 주세요