함수 기능
인자로 지정한 파일에 대해 사용자 , 프로세스 접근가능한지 판단하는 시스템호출
함수 원형
#include<unistd.h>
int access(const char *pathname, int mode)
리턴값 : 성공시 0 에러시 -1 리턴
함수 파라메터
pathname
인자로 지정한 파일
mode
R_OK, W_OK, X_OK, F_OK
파일존재여부판정
함수 예제
access1
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
int main(int argc, char *argv[]){
int i;
if(argc<2){
fprintf(stderr,"usage:%s<file1><file2>..<fileN>\n",argv[0]);
exit(1);
}
for(i=1; i<argc; i++){
if(access(argv[i],F_OK)<0){
fprintf(stderr,"%s doesn't exist.\n",argv[i]);
continue;
}
if(access(argv[i],R_OK)==0)
printf("User can read %s\n",argv[i]);
if(access(argv[i],W_OK)==0)
printf("User can write %s\n",argv[i]);
if(access(argv[i],X_OK)==0)
printf("User can execute %s\n",argv[i]);
}
exit(0);
}
access2
#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}
};
int i;
if(argc<2){
fprintf(stderr,"usage : %s<file>\n",argv[0]);
exit(1);
}
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);
}
함수 결과
access1
access2
리눅스시스템 프로그래밍 - 홍지만 저
교재 내에 있는 예제를 바탕으로 작성한 글 입니다.
'C & LINUX' 카테고리의 다른 글
C / LINUX chmod(2) fchmod(2) (0) | 2022.05.02 |
---|---|
C / LINUX umask() (0) | 2022.05.02 |
C / LINUX atexit(3) (0) | 2022.05.02 |
C / LINUX exit(3) _Exit(2) _exit(2) (0) | 2022.05.02 |
C / LINUX tempnam(3) (0) | 2022.05.02 |