Ocean_
꾸준한 프로그래밍
Ocean_
전체 방문자
오늘
어제
  • 분류 전체보기 (174)
    • About Me (4)
    • 우아한테크코스 (27)
    • C & LINUX (50)
    • Operating System (12)
    • Database (25)
    • Computer Vision (0)
    • Problem Solving (0)
      • Programmers (0)
      • BOJ (0)
    • 코코코딩공부 (44)
      • Spring (12)
      • JAVA (14)
      • 디자인 패턴 (4)
      • 책 읽기 (4)

블로그 메뉴

  • 홈
  • 방명록

공지사항

인기 글

태그

  • Operating System
  • 정규화
  • OperatingSystem
  • 데이터 조작어
  • 자바
  • C
  • BOJ
  • 우아한형제들
  • 원시값 포장
  • 우테코5기
  • Linux
  • 리눅스
  • 인덱스
  • Spring
  • 운영체제
  • bean
  • 트랜잭션
  • 블랙잭
  • 1259
  • 우아한테크코스5기
  • SIGINT
  • signal
  • OS
  • 우아한테크코스
  • 우테코 체스
  • DB
  • 우테코
  • 백준
  • 프로세스
  • C++

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Ocean_

꾸준한 프로그래밍

C / LINUX access()
C & LINUX

C / LINUX access()

2022. 5. 2. 14:44

함수 기능

인자로 지정한 파일에 대해 사용자 , 프로세스 접근가능한지 판단하는 시스템호출

함수 원형

#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
    'C & LINUX' 카테고리의 다른 글
    • C / LINUX chmod(2) fchmod(2)
    • C / LINUX umask()
    • C / LINUX atexit(3)
    • C / LINUX exit(3) _Exit(2) _exit(2)
    Ocean_
    Ocean_
    dongVeloper

    티스토리툴바