본문 바로가기

C Language

get_cmd: cmd의 전체 경로 찾는 함수

get_cmd: cmd의 전체 경로 찾는 함수

이 함수 get_cmd는 주어진 명령어(cmd)의 전체 경로를 찾는 역할을 합니다. 환경 변수 PATH에 지정된 디렉토리들을 순회하면서 실행 가능한 명령어 파일을 찾습니다. 

함수 파라미터

  • char **paths: PATH 환경 변수에서 추출한 디렉토리 경로들의 배열
  • char *cmd: 찾고자 하는 명령어 이름

함수 동작

  1. while (*paths) 루프:
    • PATH에 지정된 각 디렉토리를 순회합니다.
  2. 경로 생성:
    • ft_strjoin(*paths, "/"): 현재 디렉토리 경로에 "/" 를 추가합니다.
    • 결과를 tmp에 저장합니다.
  3. 명령어 전체 경로 생성:
    • ft_strjoin(tmp, cmd): 디렉토리 경로(tmp)와 명령어 이름(cmd)을 결합합니다.
    • 결과를 command에 저장합니다.
  4. 임시 문자열 해제:
    • free(tmp): 더 이상 필요 없는 tmp 문자열을 메모리에서 해제합니다.
  5. 파일 접근 가능성 확인:
    • access(command, 0): 생성된 전체 경로(command)의 파일이 존재하고 접근 가능한지 확인합니다.
    • 접근 가능하면 (반환값이 0), 해당 command를 반환합니다.
  6. 파일을 찾지 못한 경우:
    • free(command): 현재 경로에서 파일을 찾지 못했으므로, command 문자열을 해제합니다.
    • paths++: 다음 디렉토리 경로로 이동합니다.
  7. 모든 경로를 확인한 후에도 파일을 찾지 못한 경우:
    • NULL을 반환합니다.

주요 포인트

  • 이 함수는 메모리 누수를 방지하기 위해 tmp command 문자열을 적절히 해제합니다.
  • access 함수를 사용하여 파일의 존재와 접근 가능성을 확인합니다.
  • PATH의 각 디렉토리를 순차적으로 검사하여 명령어를 찾습니다.
  • 명령어를 찾으면 즉시 해당 경로를 반환하고, 찾지 못하면 NULL을 반환합니다.

이 함수는 쉘에서 명령어의 전체 경로를 찾는 과정을 모방한 것으로, 사용자가 입력한 명령어를 실행하기 위한 전체 경로를 결정하는 데 사용됩니다.