C,C++ & Linux
C/C++ access(2)
KyooDong
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
책에 기술된 예제 프로그램입니다. 책 내부에는 훨씬 더 많은 자료가 있습니다. (개인적으로 좋았습니다.)