리눅스 파일 디스크립터(File Descriptor)란?

유닉스 / 리눅스 운영체제에는 I/O 리소스를 관리하고 액세스 하는 파일 디스크립터라는 개념이 있습니다. 파일 디스크립터가 무엇인지, 어떻게 사용되는지 알아보겠습니다.

파일 디스크립터란?

파일 디스크립터(File Descriptor)는 유닉스 계열 운영체제에서 파일, 파이프, 네트워크 소켓 같은 I/O 리소스와 상호작용 하는 프로세스에서 사용할 수 있는 참조 값으로 음이 아닌 정수로 할당됩니다. 이를 테면 프로세스가 시스템 커널에 함수를 콜할 때 연결된 파일에 부여된 숫자로 이야기하는 개념이라고 이해할 수 있습니다.

 

파일 디스크립터 예시

리눅스에서 example.txt라는 파일을 열고, 읽고, 닫는 작업을 예시로 들어보겠습니다.

 

1. 파일 열기

파일을 열 때는 시스템 함수인 open()을 이용합니다. 이 함수를 콜하면 운영체제는 이에 대해 고유한 파일 디스크립터를 반환합니다. 그 숫자는 3이 될 수도 있고, 4, 5, … 100 등이 될 수 있습니다.

int fd = open("example.txt", O_RDONLY);

 

2. 파일 내용 읽기

read() 함수를 호출해서 파일을 읽습니다. 이때 앞서 open()을 통해 반환받은 파일 디스크립터(fd)가 인수로 전달됩니다. 프로세스가 os에게 "아까 open()했을 때 3번 파일 디스크립터를 부여했던 example.txt를 읽어주세요"라고 부탁하는 것입니다.

ssize_t bytes_read;
char buffer[100];
bytes_read = read(fd, buffer, sizeof(buffer));

코드에서 보이는 것처럼 read() 함수의 파라미터로 fd를 전달합니다.

 

3. 파일 닫기

close() 함수를 콜해서 파일을 닫습니다. 이때도 역시 파라미터로 파일 디스크립터를 보냅니다.

close(fd);

 

참고로 윈도우에는 파일 디스크립터와 비슷한 개념으로 핸들이 있습니다.

반응형

댓글

Designed by JB FACTORY