안녕하세요 조신입니다

오늘은 파일 디스크립터에 대해 이야기 하면서 get_next_line의 openmax값을 이용해 디펜스 하는 방법을 알려드리고자 합니다.

파일 디스크립터 생성

open, creat, socket, accept 등의 함수로 open하면 fd가 생긴다. 이 함수는 거기서 할당 받은 fd값을 이 함수에 사용하는 것이다.

배경

리눅스와 유닉스에서는 시스템을 전부 파일로 처리하여 관리합니다. (하드웨어 등 모든 장치도 포함합니다.)

사용 이유

시스템에서 프로세서가 파일에 접근하기 위한 방법으로 파일 디스크립터라는 핸들이 필요합니다.

특징

어떤 파일을 열때 저희는 fd값을 할당 받습니다.

fd는 0부터 N 까지 음수가 아닌 값을 차례대로 숫자를 부여 받습니다.

0, 1, 2 는 프로세스가 메모리에서 실행할 때 기본적으로 할당되는 fd인데 이것은 tty라는 곳에 연결이 되어있습니다. tty는 간단하게 말해서 각 프로세스마다 연결된 화면 출력용 모니터 정도로 생각하셔도 될 것 같습니다.

기본 할당 fd

0번 : 표준 입력

1번 : 표준 출력

2번 : 표준 에러

그래서 우리는 3번부터 fd값을 할당 받게 됩니다. 쉽게 생각하면 fd는 파일을 다루기 위해 해당 파일의 주소를 참조하여 접근하는 형태라고 생각하면 됩니다.

fd의 최대 값

OPEN_MAX라는 값은 fd의 최대 값을 의미한다. 즉 하나의 프로세스 당 최대 OPEN_MAX개의 파일을 열 수 있다. OPEN_MAX값은 플랫폼에 따라 다릅니다. 하지만 제가 이야기 하고 싶은 부분은 저희 클러스터 맥 기준이며 다른 곳에서는 다르게 작동 할 수 있음을 미리 알려드립니다.

OPEN_MAX —get_next_line 보너스 힌트