Summary
이 프로젝트는 파일 디스크립터에서 읽은 행을 반환하는 함수를 프로그래밍하는 것입니다.
Common Instructions
- 당신의 프로젝트는 C로 작성되어야 합니다.
- 당신의 프로젝트는 Norm 따라 작성되어야 합니다. 보너스 파일/함수가 있으면 norm 검사에 포함되며 내부에 norm 오류가 있으면 0점을 받게 됩니다.
- 정의되지 않은 동작을 제외하고 기능이 예기치 않게 종료되면 안 됩니다(segmentation fault, bus error, double free 등). 이 경우 프로젝트가 작동하지 않는 것으로 간주되어 0점을 받게 됩니다.
- 필요한 경우 모든 heap 할당 메모리 공간을 적절하게 확보해야 합니다. leak은 허용되지 않습니다.
- Subject에서 필요한 경우 소스 파일을 cc로 컴파일하고 -Wall, -Wextra 및 -Werror 플래그가 포함된 Makefile을 제출해야 합니다. Makefile은 리링크되어서는 안됩니다.
- Makefile에는 적어도 $(NAME), all, clean, fclean 및 re의 룰이 포함되어야 합니다.
- 프로젝트에 보너스를 넣으려면 메인 파트에서 금지된 다양한 헤더, 라이브러리 또는 함수가 더해진 Makefile에 보너스 룰을 포함해야 합니다. Subject가 명시하지 않는다면 보너스는 다른
_bonus.{c/h}
파일에 있어야 합니다. Mandatory와 Bonus 파트 평가는 별도로 이루어집니다. - 프로젝트에서 libft를 허용한 경우 해당 소스와 관련 Makefile을 libft 폴더에 복사해야 합니다. 프로젝트의 Makefile은 Makefile을 사용하여 라이브러리를 먼저 컴파일한 후에 프로젝트를 컴파일해야 합니다.
- 프로젝트에 대한 테스트 프로그램은 제출하지 않아도 되고 채점되지 않겠지만 만드는 것이 좋습니다. 그것은 여러분과 동료들의 작업을 쉽게 테스트할 수 있는 기회를 줄 것입니다. 당신은 과제를 디펜스하는동안 이것이 유용하다는 것을 더욱 알게 될 것입니다. 실제로, 디펜스하는 동안, 여러분은 여러분 또는 동료의 시험을 자유롭게 사용할 수 있습니다.
- 할당된 Git 저장소에 작업을 제출합니다. Git 저장소에 있는 작업만 채점됩니다. Deepthought가 당신의 작품을 채점하도록 지정되어 있다면, 동료 평가 후에 이루어질 것입니다. Deepthought를 채점하는 동안 어느 부분에서든 오류가 발생한다면 평가가 중지됩니다.
Mandatory part
- get_next_line() 함수에 대한 반복 호출(예: 루프 사용)을 통해 e file descriptor가 가리키는 텍스트 파일을 한 번에 한 줄씩 읽을 수 있습니다.
- 함수는 읽은 행을 반환해야 합니다. 다른 읽을 내용이 없거나 오류가 발생한 경우 NULL을 반환해야 합니다.
- 파일을 읽을 때와 표준 입력에서 읽을 때 모두 기능이 예상대로 작동하는지 확인합니다.
- 중요!! 파일의 끝에 도달하여 \n 문자로 끝나지 않는 경우를 제외하고 반환되는 행에는 종료 \n 문자가 포함되어야 합니다.
- 헤더 파일 get_next_line.h에는 적어도 get_next_line() 함수의 프로토타입이 포함되어야 합니다.
- get_next_line_utils.c 파일에 필요한 모든 helper 함수를 추가합니다.
- get_next_line()의 파일을 읽어야 하므로 다음 옵션을 컴파일러 호출에 추가합니다 :
-D BUFFER_SIZE=n
- 이건 read()에 대한 버퍼 크기를 정의합니다. 버퍼 크기 값은 코드를 테스트하기 위해 동료 평가자와 Moulinette에 의해 수정됩니다.
- 다음과 같이 코드를 컴파일합니다(버퍼 크기 42는 예시입니다).
cc -Wall -Wextra -Werror -D BUFFER_SIZE=42 <files>.c
- file descriptor가 가리키는 파일이 마지막 호출 이후 변경되었지만 read()가 파일 끝에 도달하지 않은 경우 get_next_line()은 정의되지 않은 동작을 하는 것으로 간주합니다.
- 또한 get_next_line()은 바이너리 파일을 읽을 때 정의되지 않은 동작을 하는 것으로 간주합니다. 그러나 원한다면 이 동작을 처리하는 논리적인 방법을 구현할 수 있습니다.
forbidden
- 이 프로젝트에서 libft를 사용할 수 없습니다.
lseek()
는 금지되어 있습니다.- 전역 변수는 사용할 수 없습니다.
Bonus part
이 프로젝트는 간단하며 복잡한 보너스를 허용하지 않습니다. 하지만, 우리는 당신의 창의성을 신뢰합니다. 필수 파트를 완료한 경우 이 보너스 파트를 시도해 보십시오.
다음은 보너스 부품 요구 사항입니다.
- 정적 변수 하나만 사용하여 get_next_line()을 개발합니다.
- get_next_line()은 여러 file descriptor를 동시에 관리할 수 있습니다.
예를 들어, file descriptor 3, 4, 5에서 읽을 수 있는 경우 각 file descriptor의 읽기 스레드를 손실하거나 다른 fd에서 줄을 반환하지 않고 호출당 다른 fd에서 읽을 수 있어야 합니다.
즉, get_next_line()을 호출하여 fd 3에서 읽은 다음 fd 4, 5에서 호출하고 다시 3, 다시 4에서 호출할 수 있습니다.
보너스 파트 파일들에 _bonus.[c\h]
접미사를 추가하세요.
즉, mandatory part의 파일과 함께 다음 3개의 파일을 제출해야 합니다.
- get_next_line_bonus.c
- get_next_line_bonus.h
- get_next_line_utils_bonus.c