2.4.6 실습 문제 4: 파일 시스템 자료 구조 만들기
N-항 트리를 이용하여 디렉터리 이동, 파일/디렉터리 검색, 파일/디렉터리 추가, 파일/디렉터리 목록 출력 등의 기능을 지원하는 파일 시스템 자료 구조를 구성하세요. 이 트리는 파일 시스템의 모든 원소(파일 또는 디렉터리)에 대한 계층 구조(경로)와 정보를 가지고 있어야 합니다.
실습 문제를 해결하기 위해 다음 단계를 따라하세요.
1. 기본적인 N-항 트리를 생성합니다. 이 트리의 노드는 디렉터리 또는 파일의 이름, 그리고 이것이 파일인지 디렉터리인지를 분간하는 플래그를 멤버로 갖습니다.
2. 현재 디렉터리를 저장할 데이터 멤버를 추가합니다.
3. 단일 디렉터리 루트(/)로 트리를 초기화합니다.
4. 경로명(path)을 인자로 받는 디렉터리/파일 검색 함수를 추가합니다. 경로명은 /부터 시작하는 절대 경로와 상대 경로를 모두 지원해야 합니다.
5. 지정된 경로에서 파일/디렉터리를 추가하는 함수와 파일/디렉터리 목록을 출력하는 함수를 추가합니다.
6. 현재 디렉터리를 변경하는 함수를 추가합니다.
부록과 깃허브에 나타난 실습 문제 해답에서는 파일과 디렉터리를 구분하기 위해 목록 출력 시 파일 앞에는 '-'를, 디렉터리 앞에는 'd'를 함께 출력했습니다. 절대 경로와 상대 경로를 섞어서 다수의 파일 및 디렉터리를 만들고 직접 테스트해보기 바랍니다.
실습 문제 해답에서는 '.'를 이용하여 현재 디렉터리를 나타낸다거나 '..'를 이용하여 상위 디렉터리를 나타내는 등의 리눅스 규칙은 지원하지 않았습니다. 이러한 작업은 기존 노드에 부모 노드를 가리키는 포인터 멤버 변수를 추가하여 구현할 수 있습니다. 이외에도 심볼릭 링크(symbolic link)를 지원한다거나 파일/디렉터리 이름을 지정할 때 '*' 문자를 지원하는 등의 기능을 추가할 수도 있습니다. 이러한 연습을 통해 프로그램에 필요한 기능을 추가할 수 있는 능력을 키우기 바랍니다.