-
C/C++ access(2)C,C++ & Linux 2020. 5. 17. 19:55728x90
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