system("java .....")
VC ++ 코드를 사용 하여 cmd에서 Java 앱을 실행했습니다.
자바 앱은 cmd에서 서버를 실행하고 콘솔에 정보를 출력합니다. cmd에서 "dir"명령을 실행하는 것처럼 명령을 입력 할 수도 있습니다.
이제 프로그램에서 모든 출력을 얻고 C ++ 코드를 사용하여 Java 앱에 전송 된 명령을 작성하고 싶습니다.
그러나 system()
Java 앱을 중지 할 때까지 반환되지 않는 것으로 나타났습니다. 합리적입니다. 그리고이를 피하는 방법은 무엇입니까?
그리고 가장 큰 문제는 출력을 얻고 명령을 작성하는 방법을 모른다는 것입니다. 누구나 방법을 줄 수 있습니까?
감사합니다!
PS 자바 앱의 코드는 변경할 수 없습니다.
-------------------------------------- 나는 진전이 있었다 -------- ------------
int main()
{
char psBuffer[256];
FILE* output = _popen("java xxxx.jar", "rt" );
if(output == NULL)
return 0;
while(fgets(psBuffer, 256, output))
{
printf(psBuffer);
}
if (feof( output))
{
printf( "\nProcess returned %d\n", _pclose( output ) );
}
else
{
printf( "Error: Failed to read the pipe to the end.\n");
}
system("pause");
return 0;
}
"dir"을 사용하면 완벽하게 작동하지만 java를 사용할 때 psBuffer는 항상 아무것도 아니며 Java 앱의 출력은 정상적으로 출력됩니다. 파이프가 Java의 출력을 리디렉션 할 수 없습니까?
내 코드를 변경하고 일부 Java 명령을 완벽하게 실행합니다.
FILE* output = _popen("java -version 2>&1", "rt" );
하지만 .jar을 실행할 때 실패했습니다. .jar의 코드를 읽고 출력이 .Java에 java.util.logging.Logger.info()
익숙하지 않습니다. info()
cmd 단위로 작업량을 어떻게 처리 합니까?
감사합니다!
마지막으로 위의 마지막 코드가 올바르게 작동한다는 것을 알았습니다. 그러나 Java 앱의 원본 출력이 리디렉션되지 않았습니다. 정상적으로 표시되지만 버퍼가 원하는 출력을 올바르게 수신했습니다. 어쨌든 문제를 해결했습니다. 모두 감사합니다 !!!
리디렉션 된 입력 및 출력을 사용하여 자식 프로세스 만들기 MSDN 문서에서는 이를 수행하는 방법을 설명합니다. 통과해야 할 코드가 상당히 많지만 원하는 작업을 수행 할 수 있고이를 완전히 제어 할 수 있습니다.
반면에 _popen을 사용하는 것이 훨씬 쉽지만 많은 제어 권한이 없습니다. 얼마나 많은 코드를 작성할 것인지에 대한 정확한 요구 사항에 따라 다릅니다. :).
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다