ls 명령어 구현 2단계, ls -alR 구현, 디렉토리 정보 출력-2

IT/프로그래밍 과제



2013/05/05 - [Programming/프로그래밍 과제] - ls 명령어 구현 2단계, ls -alR 구현, 디렉토리 정보 출력-1


지난번 포스팅에서 터미널에 ls -alR 을 쳐서 출력 결과를 살펴보았었다.

오늘은 동작에 관한 알고리즘을 생각해 볼 것이다.


1차 ls 명령어 구현에서는 단일 Linked List를 사용해서 ls명령어를 구현했었는데,

이번 하위디렉토리 출력도 같은 자료구조를 사용해서 구현할 것이다.


우선 지난 번 ls명령어 구현 동작을 살펴보면,

연결된 리스트 들을 관리하는 List가 있고, 

List에는 head, tail이 각각 Linked List들의  맨 앞과 뒤를 연결하고 있는 자료구조 형태이다. 

그리고 각각의 Listed List들에는 파일의 정보가 담겨있는 구조체 포인터를 가지고 있다.


ls -alR 명렁어는 파일 출력 순서대로 하위 디렉토리를 출력하는데,

이에 따른 알고리즘은 생각해 보면 간단하다.


처음 입력 받은 디렉토리 path값에 함수의 인자로 하위디렉토리 path를 인자로 넘겨주면 또 다시 위와 같은 출력을 할 수 있을 것이다. 


간단히 예를 들어 그림으로 보자면,

처음 입력 받았던 /etc를 자료구조에 모두 저장 한 뒤, 파일 이름순으로 정렬 후

연결된 리스트들의 맨 처음 부터 디렉토리인지 검사 한 뒤에


순차적인 검사를 통해 파일이 디렉토리이면 그 파일의 절대Path를 디렉토리 자료를 저장 정렬 출력하는 함수의 인자로 넘겨주면 위 그림과 같이 동작 할 수 있을 것이다. 

(자주 형광색이 디렉토리를 검사하고 다시 함수를 호출해서 가는 선이다)


그렇다면 우리가 원했던 재귀적인 동작으로 ls -alR 명령어를 구현 할 수 있다!!

생각보다 간단하다고 생각되지 않는가?


알고리즘과 동작 방법만 본다면 간단하다는 생각이 들 것이다. 

디렉토리 판별구문과 디렉토리Path를 넘겨주기만 한다면 재귀적으로 동작하여,

하위 디렉토리들을 전부 출력할 수 있을 테니 말이다.


하지만, 파일을 판별하는 것과 Path를 넘겨주는 부분에 신경써야할 부분이 있다.

실제로 이 부분이 생각지 못한 복병이 숨어있어 시간이 꽤 지체 되었었다.


다음 포스팅에서 ls -alR 하위디렉토리 정보까지 출력하는 데 

필요한 구문과 방법 및 코딩에 대해 알아 보도록 하자.