문제 이해

Get Next Line은 메인 함수에서 파일을 열고, 반복문을 통해 *line 변수 안에 개행 문자를 제외한 문자열을 받을 수 있도록 도와주는 함수입니다.

예를 들어,

Hi, my name is chanhohan nice to meet you!

파일 안에 위와 같은 문장들이 있다고 하면, get_next_line함수를 이용하여 Hi, my name is chanhohan 과 nice to meet you! 를 구분할 수 있게 됩니다. read 함수를 통해 구현하면 되는데, buffer 길이 만큼 받아올 수 있다는 점을 이용하면 됩니다.

구현에 앞서 코드 구성 계획

우선 static 에 대한 이해가 필요했습니다. 왜냐하면 read를 통해 문자열을 버퍼에 저장을 하고나서 개행문자를 만났을 경우 함수를 끝내야 하는데, buffer를 지역변수로 선언해 버리면 함수가 끝난 다음에는 값이 사라져 버리고 다음 read는 개행 다음이 아닌 buffer만큼 읽은 다음 부분부터 읽어버리기 때문입니다. 따라서 값을 저장할 부분이 필요했는데, 그것이 바로 static 입니다.

static을 통해 변수를 생성하면 그 부분은 데이터 영역으로 들어가기 때문에 문자열을 저장해 놓는 것이 가능합니다. 따라서 문자열을 적절히 저장해 놓고, 다음 get next line 함수를 실행했을 때 저장해 놓은 문자열을 검사해가며 개행문자를 기준으로 나누면 됩니다.

read 함수를 기준으로 반복문을 돌릴 경우 static에 저장된 부분에 개행문자가 포함되어 있는 것을 생각해 보면 굳이 read를 먼저 실행할 필요가 없다고 생각했습니다.

쉽게 말해서, save[fd]에 개행문자가 있는 것이 확실하면 read를 할 필요가 없기 때문에 read 앞에 해당 함수를 넣었습니다.