2011-10-01 7 views
4

프로세스를 생성하고 ls를 실행하여 ls와 같은 명령을 실행한다고 가정 해 보겠습니다.위치를 알 수없는 명령에 대해 execv를 사용하는 방법은 무엇입니까?

char * const parm[] = { "/usr/bin/ls","-l" , NULL }; 
if ((pid = vfork()) == -1) 
    perror("fork error"); 
else if (pid == 0) 
{ 
    execv("/usr/bin/ls", parm); 
} 

이제 문제는 ls 명령이있는 곳에서 하드 코딩 된 것입니다 (/usr/bin/ls). 이제 특정 명령이있는 곳을 알지 못하고 실행하고 싶다면 어떻게해야합니까? 나는 일반 셸에서 PATH 변수가 동일한 결과를 얻기 위해 검색된다는 것을 알고 있지만 execv를 사용하는 C 프로그램의 경우 어떻게 구현합니까?

답변

7

execv(3) 대신 execvp(3)을 사용하십시오. execvpexeclp은 정확히 execvexecl처럼 작동하지만, 실행 파일에 대해 $PATH 환경 변수를 검색합니다 (자세한 내용은 매뉴얼 페이지 참조).

+0

+1 댕, 저를 때려 눕히세요. –

관련 문제