ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • C/C++ access(2)
    C,C++ & Linux 2020. 5. 17. 19:55
    728x90

    access(2) 함수 기능

    프로세스가 지정한 파일에 대해 접근 가능한지 확인해주는 함수

    프로세스가 접근 가능 여부는 유효 사용자 아이디와 유효 사용자 그룹 아이디에 의해 결정됩니다.

    함수 원형

    #include <unistd.h>
    
    int access(const char *filepath, int mode);

    매개변수

    filepath

    권한을 확인하고자 하는 파일의 경로

     

    mode

    어떤 권한을 확인하고 싶은지 명시하는 모드

    모드 설명
    F_OK 파일의 존재 유무
    R_OK 읽기 권한 판정
    W_OK 쓰기 권한 판정
    X_OK 실행 권한 판정

    반환값

    성공 시 0 리턴 (권한이 있으면 0 리턴)

    에러 시 -1 리턴하고 errno 설정

    예제

    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    
    int main(int argc, char *argv[]) {
        for (int i = 1; i < argc; i++) {
            if (access(argv[i], F_OK) < 0) {
                fprintf(stderr, "%s 파일이 존재하지 않습니다.\n", argv[i]);
                continue;
            }
            printf("%s 권한 : ", argv[i]);
    
            if (access(argv[i], R_OK) == 0)
                printf(" 읽기권한");
    
            if (access(argv[i], W_OK) == 0)
                printf(" 쓰기권한");
    
            if (access(argv[i], X_OK) == 0)
                printf("실행권한");
    
            printf("\n");
        }
        exit(0);
    }
    

    결과

    예제2

    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    
    #define TABLE_SIZE (sizeof(table)/sizeof(*table))
    
    int main(int argc, char *argv[]) {
        struct {
            char *text;
            int mode;
        } table[] = {
            {"exists", 0},
            {"execute", 1},
            {"write", 2},
            {"read", 4}
        };
    
    	// i == 0 : exists
    	// i == 1 : execute
    	// i == 2 : write
    	// i == 3 : read
        for (int i = 0; i < TABLE_SIZE; i++) {
            if (access(argv[1], table[i].mode) != -1)
                printf("%s -ok\n", table[i].text);
            else
                printf("%s\n", table[i].text);
        }
        exit(0);
    }
    

    결과

     

     

     

     

     

     

     

     

     

     

    리눅스시스템프로그래밍 저자 : 홍지만
    https://book.naver.com/bookdb/book_detail.nhn?bid=14623672

    책에 기술된 예제 프로그램입니다. 책 내부에는 훨씬 더 많은 자료가 있습니다. (개인적으로 좋았습니다.)

    'C,C++ & Linux' 카테고리의 다른 글

    C/C++ chmod(2), fchmod(2)  (0) 2020.05.17
    C/C++ umask(2)  (1) 2020.05.17
    C/C++ stat(2), lstat(2), fstat(2)  (0) 2020.05.17
    C/C++ sync(2), fsync(2), fdatasync(2)  (0) 2020.05.16
    C/C++ dup2()  (0) 2020.05.16

    댓글

Designed by Tistory.