과제를 위한 배경 지식
- static 변수
- 메모리의 데이터 영역에 저장된다.
- 프로그램이 종료될 때까지 유지된다.
- 파일 디스크립터(fd)
- 특정한 파일에 접근하기 위한 추상적인 키
- 0,1,2는 표준 POSIX 파일 서술자로 각각 표준입력, 표준출력, 표준에러를 의미한다.
- 프로세스 실행 도중 파일을 open 하면 커널은 해당 프로세스의 fd 중에 사용하지 않는 가장 작은 값을 할당한다.
- OPEN_MAX
- fd의 최대값
- 하나의 프로세스에서 열 수 있는 최대의 파일 개수를 의미
getconf OPEN_MAX
: 현재 OS에서의 OPEN_MAX값을 출력
- read 함수
함수 원형
ssize_t read(int fd, void *buf, size_t nbyte);
- 동작
fd
가 가리키는 파일에서nbyte
만큼을 가져와서buf
가 가리키는 주소에 읽는다.
- 리턴값
- 성공 → 읽은 바이트 or 0(EOF 읽으면)
- 실패 → -1
- 유의사항
- 문자열의 끝을 알리는 널문자가 별도로 추가되지 않기 때문에 따로 추가해줘야 한다.
- gcc -D
gcc -D name=definition
#define
을 프로그램 외부에서 정의하고 컴파일 시 반영할 수 있다.gcc -Wall -Wextra -Werror -D BUFFER_SIZE=42 get_next_line.c get_next_line_utils.c
알아두면 좋은 내용
- 메모리 할당 관련
- Dangling pointer
- Double free
- 디버거 관련
- Vscode Debugger
- valgrind (Mac OS에서는 Catalina까지만 지원된다고 한다.)
- lldb
- 메모리 구조