DEV Community

nailhae
nailhae

Posted on

[시스템 프로그래밍] 파일 열기, 닫기

Low-level vs High-level file IO

  • Low-Level File IO (System call)
    • System call을 이용해서 파일 입출력 수행
    • File descriptor 사용
    • Byte 단위로 디스크에 입출력
    • 특수 파일에 대한 입출력 가능
  • High-Level File IO (Buffered IO)
    • C Standard library를 사용해서 파일 입출력 수행
    • File pointer 사용
    • 버퍼(block) 단위로 디스크에 입출력
      • 여러 형식의 입출력 지원

Opening files - open(2)

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

int open(const char *pathname, int flags [, mode_t mode]);
Enter fullscreen mode Exit fullscreen mode
  • pathname (file path)
    • 열려는 파일의 경로 (파일 이름 포함)
  • flags (file state flags. Man page 및 참조)
    • 파일을 여는 방법(access mode) 설정
    • 여러 플래그 조합 가능 (OR bit operation ( | ) 사용)
  • mode (file access permission. Man page 및 참조)
    • 파일을 새로 생성(O_CREATE) 할 때만 유효
    • 파일 권한 설정 값 사용 (예, 644)
    • 정의 된 플래그 사용
      • 여러 플래그 조합 가능 (OR bit operation ( | ) 사용)
  • return: file descriptor

File descriptor

  • 열려 있는 파일을 구문하는 정수(integer) 값
    • 특수 파일 등 대부분의 파일을 지칭 가능
    • Process별로 kernel이 관리
  • 파일을 열 때 순차적으로 할당 됨
    • Process 당 최대 fd 수 = 1,024 (default, 변경 가능)
  • Default fds (수정 가능)
    • 0: stdin
    • 1: stdout
    • 2: stderr

File table

  • 열린 파일을 관리하는 표
    • Kernel이 process별로 유지
    • 열린 파일에 대한 각종 정보 관리
      • Access mode, file offset, pointer to files

Closing Files - close(2)

#include <unistd.h>

int close(int fd);
Enter fullscreen mode Exit fullscreen mode
  • fd (file descriptor)
    • 닫으려는 file descriptor
  • return
    • 0: success
    • -1: error

실습

파일 열고 닫기

#include <sys/types,h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>

int main(void)
{
    int     fd;
    mode_t  mode;

    mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH; // 644
    fd = open("hello.txt", O_CREAT, mode);
    if (fd == -1)
    {
        perror("Creat");
        exit(1);
    }
    close(fd);
    return (0);
}
Enter fullscreen mode Exit fullscreen mode

참고

Discussion (0)