파일디스크립터

임정환·2023년 9월 6일
0

fopen 등의 함수를 사용해서 파일을 읽어올 때 , 파일디스크립터를 받아오는 건 알고 있었지만 정확히 무슨 개념인지는 잘 이해를 못하고 있었다. Unix의 경우 모든 자원을 file로서 관리하기 때문에 , Unix 시스템에서 프로세스가 이 파일들을 접근할 때 파일 디스크립터 개념을 사용한다.

int main(){
	int fd = open(pathname, flags, mode) //return fd
}

잘 쓰지는 않지만 , open 함수를 통해 파일 디스크립터를 반환받을 수 있다.
그래서 파일 디스크립터가 뭘까?

File Descriptor


기본적으로 Unix에서 프로세스가 파일 시스템의 파일들을 다루기 위해 쓰이는 0 이상의 정수값들이다.
프로세스는 처음에 0,1,2 파일 디스크립터는 기본적으로 표준 입력/출력/에러로 할당이 되어있다.

프로세스가 파일을 open하게 되면 커널이 프로세스에게 해당 프로세스가 사용 가능한 가장 작은 FD값을 배정해준다. 프로세스는 이후 해당 FD를 기반으로 파일에 접근하게 된다. ( Unix의 i-node 테이블과 최종적으로 매핑되게 된다)

원리

우선 Kernel에게 fd를 부여받게 된다. 그럼 이 fd가 의미하는 바가 무엇일까? 해당 FD Table은 Struct의 배열이고 각 Struct들은 다시 File Table의 dentry구조체를 포인팅하고 있다. 해당 dentry구조체는 다시 한번 i-node 테이블에서 해당 fd가 참조하고 있는 file의 i-node 구조체를 가르키고 있으며 , 해당 i-node에 접근이 가능하다.

요약

부여받은 FD를 통해 시스템 콜을 수행하여 해당 파일에 접근가능하다!

profile
CS 박제

0개의 댓글