[Get next line 구현하기]

......·2023년 7월 14일

42서울

목록 보기
5/7

구현하고자 하는 목표

  • FD(파일 디스크립터)에 있는 내용을 한줄씩(개행문자 포함)해서 읽어오는것

구현을 위해서 필요한 개념

  • Static 변수
  • FD란
  • Read함수 사용법

전체적인 구현 내용

  • read를 통해서 fd에 있는 내용을 읽어옴
  • 읽어올 때, 개행문자의 포함 여부를 기준으로 판단
    -> 개행문자가 없을 경우 : 내용을 계속 읽으면서, 기존에 읽어온 문자열에 더해줌
    -> 개행문자가 있을 경우 : 읽기를 멈추고, 개행문자까지의 배열을 반환해주고, Staitc 배열에 남은 문자열 저장
  • 마지막 EOF를 읽었을 때는, 이전까지의 static 배열에 있는 문자열 반환

FD(File Descriptor)

  • 파일 디스크립터란? - 컴퓨터 프로그래밍 분야에서 파일 서술자(file descriptor) 또는 파일 기술자는 특정한 파일에 접근하기 위한 추상적인 키(출처. 위키백과(https://ko.wikipedia.org/wiki/%ED%8C%8C%EC%9D%BC_%EC%84%9C%EC%88%A0%EC%9E%90), 즉, 내가 읽어오고자 하는 파일의 위치를 알려주는 정수값으로 기본적으로 0(STDIN, 표준입력),1(STDOUT, 표준출력),2(STDERROR, 표준에러)는 할당이 되어서 다음 fd인 3부터 사용이 가능

Read()함수

  • read(int fd, const void *buf, size_t size)가 원형이며, read를 할 fd가 첫번째 인자, 2번째는 읽어올 내용을 담을 버퍼, 3번째는 읽어올 크기를 의미
  • 예를 들어 read(0, &buf, 3)은 표준입력(STDIN)으로 부터 3글자를 읽어서 buf에 저장하겠다는 의미

Static 변수

  • 정적(static) 변수란? - 프로세스가 실행될 때, main이 종료되기 전까지 정적으로 값을 가지고 있는 변수로 선언시에 static 자료형 변수명 식으로 선언을 하면됨
  • 즉, main문이 돌고 있는 상황에서 static 변수에서 가지고 있는 값은 종료 전까지 값을 들고 있기때문에, 구현하고자 하는 get next line에서 사용할 자료형으로 알맞음

기능하나씩 구현하기(Mandetory)

  1. read를 통해서 fd에 해당하는 내용 읽어오기
  2. 읽어온 내용을 static 배열에 저장
  3. static 배열에 '\n' 문자가 있는지 확인을 해서 처리함수 작성
    3-1. 개행이 있을 경우 : 개행문자 전까지 문자열을 반환해주고, 남은 문자열을 static배열에 다시 저장
    3-2. 개행이 없을 경우 : 1~3번 과정 반복
  4. 3번과정을 진행하다가 read에서 EOF를 읽어올 경우, 마지막으로 static배열에 저장된 모든 문자열을 반환하고 종료

보너스 파트

구현 목적

  • FD가 하나가 아닌 여러 개일 경우, 각 FD별로 읽어온 내용들을 반환하고자함

구현방법

  1. 정적배열을 통한 구현
    1-1. 정적배열일 경우, FD가 최대로 열릴수 있는 경우만큼 정적할당을 해주어야함
    1-2. 위의 방법의 경우, 각 OS별로 FD의 최대값이 다르기때문에 확인하고 사용해야함
  2. 동적할당을 통한 구현
    2-1. 입력된 FD만큼 동적할당을 통해서, Linked List방식 또는 vector 방식으로 구현을 함
    2-2. 동적할당을 통해서 원하는 만큼 할당하기 때문에 안정성 및 메모리 부분에서 정적할당보다 뛰어남
    2-3. 대신 정적배열에 비해, 구현 난이도가 올라감

구현하기 - 정적배열

  1. 기본적인 구조는 위의 Mandetory파트와 동일하나 fd에 따라서 각 내용이 달라져야하므로, static 변수를 배열로 선언해서 fd별로 만들어줌
  2. 나머지는 배열로 선언된 위치에 맞게 fd에 따른 static 배열을 넣어주도록 변경하면 구현완료

0개의 댓글