path resolution man page : http://linux.die.net/man/2/path_resolution
path 값을 인자로 받는 함수는 path에 대한 검증을 해야한다. 상대경로일 경우 절대 경로로 바꾸어주고 (/test/../a -> /a) path 에 해당하는 파일의 종류를 파악하고 함수가 동작해야하는가 말아야하는가를 판단해야한다. |
가. 연속된 '/' 는 '/' 하나로 대체한다. 예) '//' -> '/' 나. '/./' 로 '/' 하나로 대체한다. 다. '/../' 상위 토큰(폴더)을 제거 예) /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 : 심볼릭 링크의 최대 연결 갯수이다. |
'학습자료(~2017) > 리눅스' 카테고리의 다른 글
[Linux] RPM package(RPM 만들기 , RPM 패키징) 이모저모 (0) | 2013.04.04 |
---|---|
[LINUX] Library constructor and destructor functions (라이브러리 생성자, 소멸자 기능 _init , _fini) (0) | 2013.03.21 |
[Linux] 메모리 캐쉬 삭제하기 (0) | 2013.02.28 |
[LINUX]ext3, ext4 크기 확장 - Resize an ext3, ext4 (2) | 2013.02.01 |
[LINUX] samba 삼바 설정 및 해결 (0) | 2013.01.24 |