ACCESS(2)

이름
access - 파일의 사용자 권한을 체크한다.

사용법
#include <unistd.h>

int access(const char *pathname, int mode);

설명
access 는 프로세스가 파일에 읽고,쓰고 것이 가능한지 체크한다. 만일 경로명이 심볼릭링크라면 링크 테스트로 원본 파일을 체크하게 된다. mode 는 하나이상의 R_OK , W_OK , X_OK and F_OK로 구성된 허상(mask) 이다. R_OK, W_OK and X_OK 는 각각 파일의 존재, 읽기, 쓰기, 실행권한 체크를 요구한다. F_OK는 단지 파일의 존재유무의 체크만을 요구한다. 테스트는 파일이 위치하고 있는 디렉토리의 권한에 의존하고, 디렉토리와 심 볼릭 링크 파일도 같은 이치이다. 커널에의해 실행될때의 id보다는 프로세스의 실제 UID나 GID를 체크하게 된다. 이것은 set-UID프로그램실행을 허락하기 위함이다. 파일 타입이나 내용이 아닌 억세스 비트(access bits)만을 체트한다. 그러므로, 만일 디렉토리가 "쓰기 가능"이라면, 디렉토리안에 파일을 생성할 수 있지만, 디렉토리가 파일로써 쓰여질수 있는것은 아니다.

반환값
모든 요구하는 권한이 받아들여져 성공하게 되면, 0이 반환된다. 적어도 하나 이상이 거절되거나 에러가 나면 -1이 반환되고, errno가 적절하게 셋팅된다.

에러

EACCES
    요구한 접근이 파일에 의해 거절되거나 경로명안의 어느 한 디렉토리에 의해 거절되었다.

EROFS
    쓰기 권한이 read-only인 파일 시스템에 의해 거절되었다.

EFAULT
    경로명 의 위치가 당신이 접근할 수 있는 주소공간 밖에 있다.

EINVAL
    모드 가 적절하지 않다.

ENAMETOOLONG
    경로명 이 너무길다.

ENOENT
    경로명 의 디렉토리 구성이 접근 가능하지만 존재하지 않거나 깨진 링크이다.

ENOTDIR
    경로명 의 디렉토리가 실제 디렉토리가 아니다.

ENOMEM
    커널 메모리가 부족하다.

ELOOP
    너무많은 심볼릭링크가 경로명 안에 존재한다.

EIO I/O 에러.

RESTRICTIONS
access 는 요구한 접근타입(access types)의 호출이 실패하면, 다른 타입이 성공 한다하더라도 에러를 반환한다.

access 는 UID 맵핑이 가능한 NFS파일 시스템에서 작동하지 않을 수 있다. 왜냐하면 UID맵핑은 사용자가 볼 수없는 서버에서 실행되기 때문이다.

호환
SVID, AT&T, POSIX, X/OPEN, BSD 4.3

관련 항목
stat(2), open(2), chmod(2), chown(2), setuid(2), setgid(2)

역자
ASPLINUX<man@asp-linux.co.kr>, 2000년 7월 29일