이 함수 get_cmd는 주어진 명령어(cmd)의 전체 경로를 찾는 역할을 합니다. 환경 변수 PATH에 지정된 디렉토리들을 순회하면서 실행 가능한 명령어 파일을 찾습니다.
함수 파라미터
- char **paths: PATH 환경 변수에서 추출한 디렉토리 경로들의 배열
- char *cmd: 찾고자 하는 명령어 이름
함수 동작
- while (*paths) 루프:
- PATH에 지정된 각 디렉토리를 순회합니다.
- 경로 생성:
- ft_strjoin(*paths, "/"): 현재 디렉토리 경로에 "/" 를 추가합니다.
- 결과를 tmp에 저장합니다.
- 명령어 전체 경로 생성:
- ft_strjoin(tmp, cmd): 디렉토리 경로(tmp)와 명령어 이름(cmd)을 결합합니다.
- 결과를 command에 저장합니다.
- 임시 문자열 해제:
- free(tmp): 더 이상 필요 없는 tmp 문자열을 메모리에서 해제합니다.
- 파일 접근 가능성 확인:
- access(command, 0): 생성된 전체 경로(command)의 파일이 존재하고 접근 가능한지 확인합니다.
- 접근 가능하면 (반환값이 0), 해당 command를 반환합니다.
- 파일을 찾지 못한 경우:
- free(command): 현재 경로에서 파일을 찾지 못했으므로, command 문자열을 해제합니다.
- paths++: 다음 디렉토리 경로로 이동합니다.
- 모든 경로를 확인한 후에도 파일을 찾지 못한 경우:
- NULL을 반환합니다.
주요 포인트
- 이 함수는 메모리 누수를 방지하기 위해 tmp와 command 문자열을 적절히 해제합니다.
- access 함수를 사용하여 파일의 존재와 접근 가능성을 확인합니다.
- PATH의 각 디렉토리를 순차적으로 검사하여 명령어를 찾습니다.
- 명령어를 찾으면 즉시 해당 경로를 반환하고, 찾지 못하면 NULL을 반환합니다.
이 함수는 쉘에서 명령어의 전체 경로를 찾는 과정을 모방한 것으로, 사용자가 입력한 명령어를 실행하기 위한 전체 경로를 결정하는 데 사용됩니다.
'C Language' 카테고리의 다른 글
부모 프로세스와 자식 프로세스의 free 알고리즘 차이 (0) | 2025.01.21 |
---|---|
자식 프로세스 파이프 알고리즘 (0) | 2025.01.21 |
STDIN_FILENO 의 정의 (0) | 2025.01.21 |
파이프 구조 및 여러개의 파이프 연결방법 (0) | 2025.01.21 |
access, dup, dup2, execve, fork, pipe, unlink, wait, waitpid, perror, strerror 함수 설명 (0) | 2025.01.21 |