2014-12-28 1 views
1

execl 함수를 실행하여 코드를 통해 프로그램을 컴파일하고 있습니다. 컴파일이 제대로되었는지 확인하고 싶습니다. 그래서 나는 b = execl("usr/bin/gcc","cc",path,NULL);이라고 쓰고 나중에 if(b==-1)을 확인했다. 그러나 컴파일에 오류가 있어도 if 문으로 들어 가지 않습니다. 이유가 무엇입니까? 감사합니다.execl 반환 값

int b=0; 
if ((pid1 = fork())<0) 
    perror("Error forking"); 
else { 
    if(pid1==0) 
     b= execl("/usr/bin/gcc","cc",path,NULL); 
    else wait(&status); 
} 
if(b==-1) 
    printf("\n--------\n"); 
+2

['exec'] (http://man7.org/linux/man-pages/man3/execl.3.html) 패밀리의 함수 중 하나가 성공하면 * 반환하지 않습니다. 그들은 실패의 경우에만 반환합니다. –

+1

그리고 컴파일에 오류가 발생하면 새로운 실행 파일이 생성되지 않으므로 "예상대로 작동하지 않으며 컴파일되지 않은 프로그램이 있습니다"라는 질문에 모순이 있습니다. . 코드는 예상대로 작동하지 않을 것입니다. * 컴파일러 오류가 있기 때문입니다. 실제로 실행할 프로그램이 없기 때문에 코드가 전혀 실행되지 않습니다. –

+0

하지만 그게 문제 - intential 컴파일을하는 동안 오류를 만들기 위해 뭔가를 썼다면 그것은 if 문에 도달하지 못했습니다. –

답변

2

exec이 성공하면 결코 되돌아 오지 않습니다. 성공한다는 것은 명령을 찾아 실행할 수 있음을 의미합니다. 성공하지 못하면 -1을 반환합니다.

부모 프로세스에서 wait에 사용 된 status에서 명령의 종료 값을 추출하면됩니다.

일부 매크로를 사용하여 하위 프로세스 실행 상태를 확인할 수 있습니다. 명령이 exit

  • 호출에 의해 중지 된 경우

    • WIFEXITED(status)는 당신을 말할 것이다 그리고 당신은 WEXITSTATUS(status)와 종료 상태를 얻을 수있을 것입니다.

    status이 0이면 명령이 성공적으로 실행되었음을 알게되고 다른 값은 명령이 정상적으로 작업을 수행 할 수 없음을 의미합니다.