저수준 파일 입출력, 저수준 입출력 함수

(2020-08-07)

저수준 파일 I/O, open(), read(), write(), close(), 저수준 파일 I/O 시스템호출


1. [UNIX/Linux, C언어]  저수준 파일 입출력 함수

  ※ 대부분의 파일 입출력을 5개 함수만으로 수행 가능    ☞ 시스템호출 참조
     - open(), read(), write(), lseek(), close() 

  ㅇ fd = int open(const char *path, int oflag, [mode_t mode]);
     - 헤더 파일 : 'sys/types', 'sys/stat.h', 'fcntl.h'
     - 의미
        . 지정 경로(path)에 파일 생성 또는 기존 파일을 오픈하고,
        . 파일 접근을 위한 파일기술자를 반환 함
     - 결과 리턴 : 성공시 파일기술자(번호,fd) 반환, 실패시 -1 반환
     - oflag 플래그 : 읽기 쓰기에 대한 목적 등에 대한 지정
        . O_RDONLY : 읽기 전용으로 파일 오픈
        . O_WRONLY : 쓰기 전용으로 파일 오픈
        . O_RDWR   : 읽기 쓰기 겸용으로 파일 오픈
        . O_APPEND : 기존 파일 맨뒤에 덧붙임
        . O_TRUNC  : 기존 파일 내용 삭제 (파일 크기를 0 으로 만듬)

        . O_CREAT  : 필요하면 파일 생성
        . O_EXCL   : 파일 생성하나, 이미 존재하는 파일이면 에러 발생시킴

        . O_NONBLOCK : 다른 프로세스가 접근중이라도, 읽기 모드를 허용
        . O_SYNC   : 물리적으로 쓰기 완료 전까지는 파일 쓰는 것을 금지함

        . 위 플래그들을 비트 OR 연산자로 묶어 표현 가능
     - mode 플래그 : 파일이 만들어질 경우에, 파일에 부여할 권한 지정

  ㅇ numread = ssize_t read(int fd, void *buf, size_t nbytes);
     - 헤더 파일 : 'sys/types', 'unistd.h'
     - 성공적으로 열려진 파일 또는 소켓에 대해 파일기술자를 통해 파일에 접근하여,
       규정한 바이트 단위 만큼 데이터들을 읽음
     - 결과 리턴 : 성공시 실제 읽혀진 바이트 수, (단, 파일끝을 만나면 0, 실패시 -1 반환)
     - 인자
        . fd     : 열려진 파일 또는 소켓에 대한 파일기술자(번호)
        . buf    : 파일 또는 소켓에서 읽은 데이터를 저장할 버퍼의 포인터(주소값)
        . nbytes : 파일 또는 소켓에서 읽을 데이터바이트 단위 길이

  ㅇ unmwritten = ssize_t write(int fd, const void *buf, size_t nbytes);
     - 헤더 파일 : 'sys/types', 'unistd.h'
     - 인자 : 위 read 함수와 유사
        . fd     : 열려진 파일 또는 소켓에 대한 파일기술자(번호)
        . buf    : 전송데이터가 저장된 버퍼의 포인터(주소값)
        . nbytes : 전송데이터바이트 단위 길이
     - 결과 리턴 : 실제로 쓰여진 바이트 수를 리턴

  ㅇ status = int close(int fd);
     - 헤더 파일 : 'unistd.h'
     - 의미 : 모든 파일I/O를 마치고, 열려진 파일기술자 또는 소켓을 닫음
     - 결과 리턴 : 성공시 0 반환, 실패시 -1 반환



Copyrightⓒ written by 차재복 (Cha Jae Bok)