학습자료(~2017)/리눅스

[Linux] path resolution , 경로 분석법

단세포소년 2013. 3. 6. 17:55
반응형

path resolution man page : http://linux.die.net/man/2/path_resolution


path 값을 인자로 받는 함수는 path에 대한 검증을 해야한다. 상대경로일 경우 절대 경로로 바꾸어주고 (/test/../a -> /a)  path 에 해당하는 파일의 종류를 파악하고 함수가 동작해야하는가 말아야하는가를 판단해야한다. 


1. 상대경로를 절대경로로 바꾼다.

가. 연속된 '/' 는 '/' 하나로 대체한다. 예) '//' -> '/'

나. '/./' 로 '/' 하나로 대체한다.

다. '/../' 상위 토큰(폴더)을 제거

  예) /test/test/../ -> /test/

라. 경로의 마지막이 '/..' 일 경우 상위 토큰(폴더)을 제거

마. 경로의 마지막이 '/' 라면 이 경로는 디렉토리라는 것을 명시적으로 표현하는 것임

   함수에 따라 기능처리전에 디렉토리가 아니라면 오류처리해야함


2. 절대경로를 토대로 lstat 함수를 통해 그 파일의 존재 유무와 파일의 종류를 구별해야한다.

3. 만약 lstat 통해 해당파일이 심볼릭 링크라면 readlink 함수를 통해 참조 경로를 받아온다. 그리고 참조 경로를 토대로 다시 절대경로를 구한다.

가. 참조경로의 시작이 '/' 이 아니라면 심볼릭 링크 경로를 토대로 하여 절대 참조 경로를 구한다. 

예) 심볼릭 링크 경로 : /test/sym , 참조경로 : refer/hello

    절대 참조 경로는 /test/refer/hello

나.  참조경로의 시작이 '/' 라면 참조경로를 토대로 절대 참조 경로를 구한다.

예) 심볼릭 링크 경로 :/test/sym , 참조경로 : /refer/../refer/hello

    절대 참조 경로는 /refer/hello

다. 절대 참조 경로를 구했다면 다시 lstat 함수를 통해 파일의 존재 유무와 파일의 종류를 구별한다.

4. 파일의 종류가 해당 함수와 관련이 없다면 오류를 반환해야한다.

정리

1. path를 절대 경로화한다.

2. lstat 를 통해 파일 종류를 판단하고 그에 맞는 행동을 한다.

예) open 호출인데 디렉토리인 경우 에러

3. path 계열, open 계열 api 호출시 path 가 심볼릭 링크라면 참조경로를 구한다.

4. 참조경로를 절대 경로화 하고 2번을 다시 수행한다.

중요 : 심볼릭 링크가 심볼릭 링크를 가르키고 그 심볼릭 링크가 또 심볼릭 링크를 가르키는 경우 무한 루프 상황에 빠질수 있다. 이럴 경우ELOOP 를 반환한다.


ELOOP : 심볼릭 링크가 무한으로 연결 즉, 사이클 형태로 심볼릭 링크가 연결되어 있을 경우

_POSIX_SYMLOOP_MAX : 심볼릭 링크의 최대 연결 갯수이다.




반응형