2012-01-20 1 views
2

시스템 명령이 성공적으로 실행되었고 오류를 반환하지 않았는지 확인해야합니까? MSDN Library에 따르면 여러 가지 경우가 있습니다. 다음 스 니펫이 맞는지 확실하지 않습니다.system() 결과를 확인하는 방법

char buffer[100]; 
int ret_val; 
strcpy(buffer, "copy *.txt "); 
strcat(buffer, path); 
ret_val = system(buffer); 
if(0 != ret_val) 
{ 
    perror("There was an error"); 
} 
else 
{ 
    printf("The command was run successfully."); 
} 

명령은 NULL이며 명령 인터프리터가 발견되면 0이 아닌 값을 반환

반환 값. 명령 인터프리터가 발견되지 않으면 0을 리턴하고 errno를 ENOENT로 설정합니다. command가 NULL이 아니면, 시스템은 명령 인터프리터가 리턴 한 값을 리턴합니다. 명령 인터프리터가 값 0을 반환하는 경우에만 값 0을 반환합니다. 반환 값 -1은 오류를 나타내며 errno는 다음 값 중 하나로 설정됩니다.

+0

가능한 중복 [시스템()에 의해 실행되는 명령의 상태를 얻는 방법] (http://stackoverflow.com/questions/8941691/how-to-get-the-status-of-command-run-by -system) –

+0

절대'system'을 사용하지 마십시오. 안전하고 견고한 코드를 작성하는 것은 거의 불가능합니다. –

답변

1

모든 사례를 잡으려면 다음을 수행해야합니다. 문서 상태처럼 errno을 확인하십시오

if (ret_val == 0 && errno == 0) 
{ 
    printf("success!\n"); 
} 

이 있는지 확인도 명확errno 단지 system()를 호출하기 전에.

+0

실제로 작동하지 않습니다. 내가 제안한대로 파일을 삭제하고 실행할 수 없습니다. Visual Studio 2008의 자동차 창에서 "_errno returned 0x00400808"이 표시됩니다. 그러나 이것은 if 문에도 적용됩니다. : – mustafa

+0

** man 3 system : ** 반환 값 에러시 반환 값은 -1 (예 : fork() 실패)이고, 그렇지 않으면 명령어의 반환 상태입니다.이 후자의 반환 상태는 형식입니다/bin/sh가 실행될 수없는 경우 종료 상태는 종료 (127) 명령의 종료 상태가됩니다. 대기열 (2)에 지정되어 있으므로 종료 코드는 이 WEXITSTATUS –

+0

@Pete Wilson 및 Windows 용? – mustafa

0

system의 인수가 NULL이 아니기 때문에 매우 간단한 경우 인 -1system 함수에 실패하고, 그렇지 않으면 실제 명령의 리턴 코드입니다.

+0

어떤 경우에는 '시스템'이 '1'을 반환하는 것을 보았습니다 – mustafa

+0

@ mustafa 그런 다음 실제 코드 (귀하의 경우에는'copy')가 리턴 코드와 함께 종료됩니다. –

+0

예, 그렇습니다. 삭제할 수없는 파일을 편집했습니다. 콘솔에서 "다른 프로세스에서 사용 중이기 때문에 프로세스가 파일에 액세스 할 수 없습니다."라는 메시지가 출력됩니다. 'system'은 여전히'0'을 리턴하고 있습니다. – mustafa

관련 문제