-
C/C++ chmod(2), fchmod(2)C,C++ & Linux 2020. 5. 17. 21:22728x90
chmod 함수 기능
파일의 접근 권한을 변경하는 함수입니다.
함수 원형
#include <sys/types.h> #include <sys/stat.h> int chmod(const char *filepath, mode_t mode); int fchmod(int fd, mode_t mode);
매개변수
filepath
대상 파일의 경로
fd
대상 파일의 파일 디스크립터
mode
파일의 권한
테스트 매크로 8진수 내용 S_ISUID 0004000 set-user-id S_ISGID 0002000 set-group-id S_ISVTX 0001000 sticky bit S_IRWXU 0000700 소유자 권한 마스크 S_IRUSR 0000400 소유자 읽기 권한 S_IWUSR 0000200 소유자 쓰기 권한 S_IXUSR 0000100 소유자 실행 권한 S_IRWXG 0000070 그룹 권한 마스크 S_IRGRP 0000040 그룹 읽기 권한 S_IWGRP 0000020 그룹 쓰기 권한 S_IXGRP 0000010 그룹 실행 권한 S_IRWXO 0000007 기타 사용자 권한 마스크 S_IROTH 0000004 기타 사용자 읽기 권한 S_IWOTH 0000002 기타 사용자 쓰기 권한 S_IXOTH 0000001 기타 사용자 실행 권한
반환값성공 시 0 리턴
에러 시 -1 리턴하고 errno 설정
예제
#include <stdio.h> #include <stdlib.h> #include <fcntl.h> #include <sys/types.h> #include <sys/stat.h> int main(int argc, char *argv[]) { char *fname1 = "ssu_file1"; char *fname2 = "ssu_file2"; struct stat statbuf; // ssu_file1 의 정보 수집 if (stat(fname1, &statbuf) < 0) { fprintf(stderr, "%s stat error\n", fname1); exit(1); } // ssu_file1의 접근 권한을 기존 권한에서 그룹 실행 권한을 빼고, SetUid 권한을 추가 if (chmod(fname1, (statbuf.st_mode & ~S_IXGRP) | S_ISUID) < 0) { fprintf(stderr, "%s chmode error\n", fname1); exit(1); } // ssu_file2의 접근 권한을 소유자 rwx, 그룹 r, 기타 사용자 r 권한으로 설정 chmod(fname2, S_IRWXU | S_IRGRP | S_IROTH); exit(0); }
결과
예제2
#include <stdio.h> #include <stdlib.h> #include <fcntl.h> #include <sys/types.h> #include <sys/stat.h> // 소유자, 그룹, 기타 사용자 실행 권한 #define MODE_EXEC (S_IXUSR | S_IXGRP | S_IXOTH) int main(int argc, char *argv[]) { struct stat statbuf; for (int i = 1; i < argc; i++) { if (stat(argv[i], &statbuf) < 0) { fprintf(stderr, "%s stat error\n", argv[i]); continue; } // 기존 권한에 소유자, 그룹, 기타 사용자 실행 권한을 추가하고 statbuf.st_mode |= MODE_EXEC; // 그룹, 기타 사용자 실행 권한을 not 한다. // 따라서 그룹, 기타 사용자 실행 권한은 사라지게 된다. statbuf.st_mode ^= (S_IXGRP | S_IXOTH); // 권한 수정 if (chmod(argv[i], statbuf.st_mode) < 0) { fprintf(stderr, "%s chmod error\n", argv[i]); continue; } printf("%s : 권한 변경 완료\n", argv[i]); } exit(0); }
결과
리눅스시스템프로그래밍 저자 : 홍지만
https://book.naver.com/bookdb/book_detail.nhn?bid=14623672
책에 기술된 예제 프로그램입니다. 책 내부에는 훨씬 더 많은 자료가 있습니다. (개인적으로 좋았습니다.)'C,C++ & Linux' 카테고리의 다른 글
C/C++ truncate(2) ftruncate(2) (0) 2020.05.18 C/C++ chown(2) fchown(2) lchown(2) (0) 2020.05.18 C/C++ umask(2) (1) 2020.05.17 C/C++ access(2) (1) 2020.05.17 C/C++ stat(2), lstat(2), fstat(2) (0) 2020.05.17