Search
Duplicate

pipex 명령어 - access

간단소개
access 명령어에 대해서
팔만코딩경 컨트리뷰터
ContributorNotionAccount
주제 / 분류
C
42seoul
42cursus
Scrap
태그
명령어
기초
c언어
9 more properties

access (2)

1) Manual 정리

#include <unistd.h> int access(const char *pathname, int mode);
C
복사
pathname에 해당하는 파일에 접근 가능한지 확인한다. (심볼릭 링크일 경우 역참조됨)
mode는 확인할 권한: OR 연산으로 여러 플래그 사용 가능
F_OK: 파일 존재 여부
R_OK: 읽기 권한
W_OK: 쓰기 권한
X_OK: 실행 권한
Return value: 성공시 0, 실패 혹은 에러시 -1을 반환. 상황에 따라 errno를 설정.

2) 예시코드

//main.c #include <unistd.h> #include <stdio.h> int main(void) { if (access("test.txt", F_OK | R_OK) < 0) { perror(NULL); //perror는 현재 errno에 해당하는 시스템 에러 메세지를 stderr로 출력 return (1); } else { printf("can read file\n"); return (0); } }
C
복사
실행 결과
처음 파일을 만들고 실행하면 읽을 수 있지만, 권한을 없애거나 파일이 없을 경우(즉 mode 중 하나라도 실패할 경우) 해당하는 에러 메세지가 출력된다.
추가로 알아볼 것
access는 해당 프로세스의 real UID, GID를 이용해 확인한다. (effective ID를 이용하지 않음) → 둘 차이가 뭔지 공부 필요...
주의사항: 매뉴얼에 따르면 파일을 open 하기 전에 권한을 확인하는 등의 용도로 사용할 경우, access와 open 사이 시간 간격이 파일 조작 등에 이용될 수 있어 보안상 위험하다고 한다. → 사용하지 않는 것을 권고 / 혹은 open 전에 프로세스의 effective ID를 real ID로 바꾸는 것이 보다 안전하다고 한다.
Q. access 를 꼭 써야할까..?
매뉴얼에서 사용하지 않는 것을 권하고 있음
access함수를 이용해 확인할 수 있는 에러 상황들을 확인해 본 결과, 바로 open, execve등을 적용하고 errno를 확인해도 충분하다는 결론을 얻음. → 굳이 사용할 필요 없다고 판단함.