프로그래밍 방식으로 실행되는 시스템 명령의 표준 오류 출력 차단
-
19-08-2019 - |
문제
C++에 다음 프로그램이 있습니다.
#include <iostream>
using namespace std;
int main()
{
char buf[50];
cin.getline(buf,49);
system(buf);
return 0;
}
이를 실행하고 컴파일하고 예를 들어 "helo"를 입력하면 내 프로그램에서 오류가 인쇄됩니다.
"helo" not found.
이 오류가 표시되지 않게 할 수 있나요?시스템 명령에서 오류를 비활성화하는 방법이 있습니까?
해결책
당신은 길을 바꿀 수 없습니다 system
오류가 표시됩니다. C 및 C ++는 이와 관련하여 구현에 대한 요구 사항을 거의 또는 전혀 넣지 않으므로 많은 부분이 지정되지 않은 상태로 남겨져 최종적으로 유연하게 만들 수 있습니다.
보다 정확한 제어를 원한다면 런타임 라이브러리 또는 작동 시스템 인터페이스의 기능을 사용해야합니다. 노력하다 execvp
(보다 man execvp
) Linux/Unix 또는 Windows Systems 용 CreateProcess 함수에서 Windows API를 사용하여 오류 처리 및 기타 항목을 크게 제어 할 수 있습니다.
다른 팁
당신은 리눅스에 있습니까?"./hello"를 입력해 보세요.
이것이 작동한다면 현재 디렉터리(".")가 검색 경로에 없기 때문입니다.컴파일된 프로그램이 디렉터리에 "있음"을 나타내야 합니다.
또는 다음과 같은 작업을 수행할 수 있습니다.
내보내기 PATH=$PATH:.
""추가됩니다. " (현재 디렉토리) 검색 경로에.
Windows를 사용 중이라면 "hello.exe"를 시도해 보세요.
Linux에있는 경우 오류 출력을 null
장치?
strcat(buf, "2> /dev/null");
system(buf);
제휴하지 않습니다 StackOverflow