2013-01-13 2 views
-3

system(cCmdInput);에 의해 시작된 명령이 실패했는지 알 수 있으며 오류가 있으면이를 표시 할 수 있습니까?C++ 오류 처리

cout << endl << "Enter command> "; 
getline(cin, cmdInput); 
try{ 
    cin.clear(); 
    const char *cCmdInput = cmdInput.c_str(); 
    system(cCmdInput); 
}catch (...){ 
    cout << "An error occurred"; 
} 
+6

어떻게이 메시지가 도움이 될 것으로 기대하십니까? 이런 식으로 코드를 작성하지 마십시오. 그것은 또한 당신이 사용하는 끔찍한 들여 쓰기를 포함합니다. –

+2

무엇이 당신의 질문입니까? –

+4

@ close-voters : 대부분 OP는 프로세스가 성공했는지 실패했는지를 '시스템'을 통해 감지하는 방법을 알고 싶어합니다. 실제로는 * nix 또는 Windows에서 올바르게 작동하는 프로세스에 어렵지 않습니다. 다시 열리기로 결정 (방아쇠를 당기는 손가락에 너무 빨리 굴지 마라 : 당신은 합리적으로 OP가 설명하게하기 위해 몇 초를 기다릴 수 있었다). –

답변

1

첫째을, 그것은 큰 보안 위험은 당신이 system()를 사용해서는 안된다 (특히 위의 코드에서와 같이 사용자의 입력을 사용하여). 오히려 exec() 패밀리를 살펴보십시오.

그러나 질문에 대답하려면 system()은 예외를 throw하지 않습니다. 반환 할 내용을 확인해야합니다. According to the documentation을 실행하면 일반적으로 실행 한 명령의 상태 코드가 반환됩니다. 사용중인 명령에 대한 리턴 코드를 찾아 값 system()이 이들에 대해 리턴하는지 점검해야합니다. 일반적으로 반환 값 0은 성공을 의미합니다. 예를 들어

:

if(system(cCmdInput) != 0) 
    cout << "Error" << endl; 
1

system는 C 함수이며, 예외를 throw하지 않습니다. 대신 실행이 성공하면 해석에 사용할 수있는 값을 반환합니다. thedocumantation 따르면

,

리턴 값은 -1 에러 (예를 들어 포크 (2)가 실패)과 달리 명령 반환 상태.

일반적으로 반송 상태 0은 성공을 나타냅니다.

0

실제로 * nix 및 Windows에서 system 함수는 실행 한 프로그램의 프로세스 종료 코드를 반환합니다.

잘 작동하는 프로그램을 실행하려면 결과가 0인지 확인하십시오. 규칙에 따라 프로세스 종료 코드 0은 성공을 의미하고 다른 모든 값은 실패를 의미합니다.

그러나 많은 Windows 프로그램이 오류 표시 프로세스 종료 코드를 생성한다는 의미에서 올바르지 않습니다. 프로그램을 실행 한 후 Windows 명령 인터프리터에서 가장 직접적으로 echo %errorlevel%으로이를 확인할 수 있습니다. 또 다른 방법은 논리 연결자 &&||을 사용하는 것입니다. myprog && echo OK || echo Bah, failed!.