C언어를 예로 들면
#include <stdio.h>
int main()
{
printf("Hello World!");
return 0;
}
open : 파일을 열 때 사용하는 시스템 콜, 성공 시 할당받은 fd를 반환하고 실패 시 -1을 반환한다.
close : 열린 파일을 닫을 때 사용하는 시스템 콜, 해당 fd에 대응하는 파일을 닫는다. 파일을 닫고 fd를 닫는다.
파일을 열게되면 열린 파일에 대응하는 fd를 할당하고 이를 함께 저장하여야 한다고 생각했다. 그것이 서로 대응하는 fd와 파일을 의도치 않은 변경 없이 적절히 관리할 수 있는 수단이라고 판단하였다.
이를 위해 fd_list라는 연결 리스트를 고안해서 이를 관리하고자 하였다.
새로운 파일을 열게 되면 새로운 파일-fd를 저장하는 구조체 new_fd를 초기화하여주고 파일에 대응하는 새로운 fd를 할당하였다.
여기서 open할 때 가장 주요하게 고려하여야 할 점은 open 될때 마다 fd를 갱신하고 갱신된 fd를 할당시키는 방안이다.
이를 위해. 다음와 같은 방법을 생각해보았다. thread 구조체 안에 fd_count변수를 선언하고 file을 열 때마다 이를 갱신하는 방식을 생각했다. 해당 프로세스가 진행되는 한 해당 count는 계속해서 이용할 수 있으며 갱신시키고 할당하기 용이한 방법이라고 생각했다.
파일을 open할 때 마다 fd_count를 1씩 증가시키고 증가된 fd_count를 fd로 할당하였다. 이를 통해 open될때 마다 서로 다른 새로운 fd를 할당할 수 있게 하였다.
이러한 방식으로 fd_list를 구현함으로써 얻을 수 있는 이점은 close를 할 때 삭제 대상인 fd만 받아줘도 이미 리스트 안에 대응하는 file을 포함하는 구조체 fd_elem이 존재하기 때문에 이를 순회하면서 찾아주면 된다.