2013-03-05 1 views
0

안녕하세요 사용자에두고 명령에 대한 올바른 경로를 찾기 위해 **environ 변수와 함께 execvp()를 사용하는 것을 시도하고있다.unistd.h에서 ** environ을 사용하여 올바른 경로를 검색하려면 어떻게합니까?

문제는 정말이 작업을 수행하는 방법을 이해하지 못하는 것입니다. 나는 단지 명령 파일을 열어 그들이 존재하는지 확인하려고 할 수 있다는 것을 알고 있지만 검색 할 경로를 얻는 방법을 이해하지 못한다. **environ.

+0

'** environ'은 어디에서 왔습니까? 이 작업을 수행하는 방법을 알고있는 유일한 방법은 단지 문자열을 반환하는 getenv ("PATH")를 사용하는 것입니다.이 경로는 일반적으로 콜론으로 구분 된 경로 변수의 목록입니다. 이것을 구문 분석하기 위해'strtok'을 사용할 수 있습니다. –

+0

이 답변보기 http://stackoverflow.com/questions/3127614/global-variable-for-getenv 문자열 배열을 뒤집고 PATH 변수를 검색해야합니다. PATH 문자열을 찾으면 문자열에 포함 된 경로를 구문 분석 할 수 있습니다. – Duck

답변

0
#include <stdlib.h> 
#include <stdio.h> 
#include <string.h> 

int main(void) { 
    char *start, *end; 
    char ch; 
    char* path = getenv("PATH"); 

    if (!path) { 
     fprintf(stderr, "could not get $PATH, exiting\n"); 
     exit(EXIT_FAILURE); 
    } 

    start = path; 
    do { 
     end = strchr(start, ':'); 
     if (!end) { 
      printf("%s\n", start); 
     } else { 
      ch = *end; 
      *end = '\0'; 
      printf("%s\n", start); 
      *end = ch; 
     } 
     start = end + 1; 
    } while (end != NULL); 

    return 0; 
} 

이 작은 프로그램은 env [경로]에서 별도의 경로를 얻을 수있는 방법을 보여줍니다.

0

남자 execvp는 :

execvp는()가 실행 파일 따라서

검색에 shell의 행동을 복사한다, 당신이 를 사용할 필요가 없습니다 ** 싸다 변수에 명령의 올바른 경로를 찾으려면; execvp() 당신을 위해 그것을 않습니다.

관련 문제