구현하고자 하는 목표
- FD(파일 디스크립터)에 있는 내용을 한줄씩(개행문자 포함)해서 읽어오는것
구현을 위해서 필요한 개념
전체적인 구현 내용
- read를 통해서 fd에 있는 내용을 읽어옴
- 읽어올 때, 개행문자의 포함 여부를 기준으로 판단
-> 개행문자가 없을 경우 : 내용을 계속 읽으면서, 기존에 읽어온 문자열에 더해줌
-> 개행문자가 있을 경우 : 읽기를 멈추고, 개행문자까지의 배열을 반환해주고, Staitc 배열에 남은 문자열 저장
- 마지막 EOF를 읽었을 때는, 이전까지의 static 배열에 있는 문자열 반환
FD(File Descriptor)
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)
- read를 통해서 fd에 해당하는 내용 읽어오기
- 읽어온 내용을 static 배열에 저장
- static 배열에 '\n' 문자가 있는지 확인을 해서 처리함수 작성
3-1. 개행이 있을 경우 : 개행문자 전까지 문자열을 반환해주고, 남은 문자열을 static배열에 다시 저장
3-2. 개행이 없을 경우 : 1~3번 과정 반복
- 3번과정을 진행하다가 read에서 EOF를 읽어올 경우, 마지막으로 static배열에 저장된 모든 문자열을 반환하고 종료
보너스 파트
구현 목적
- FD가 하나가 아닌 여러 개일 경우, 각 FD별로 읽어온 내용들을 반환하고자함
구현방법
- 정적배열을 통한 구현
1-1. 정적배열일 경우, FD가 최대로 열릴수 있는 경우만큼 정적할당을 해주어야함
1-2. 위의 방법의 경우, 각 OS별로 FD의 최대값이 다르기때문에 확인하고 사용해야함
- 동적할당을 통한 구현
2-1. 입력된 FD만큼 동적할당을 통해서, Linked List방식 또는 vector 방식으로 구현을 함
2-2. 동적할당을 통해서 원하는 만큼 할당하기 때문에 안정성 및 메모리 부분에서 정적할당보다 뛰어남
2-3. 대신 정적배열에 비해, 구현 난이도가 올라감
구현하기 - 정적배열
- 기본적인 구조는 위의 Mandetory파트와 동일하나 fd에 따라서 각 내용이 달라져야하므로, static 변수를 배열로 선언해서 fd별로 만들어줌
- 나머지는 배열로 선언된 위치에 맞게 fd에 따른 static 배열을 넣어주도록 변경하면 구현완료