문제

나는 사용하고있다 system C ++의 명령으로 일부 외부 프로그램을 호출하고 사용할 때마다 명령이 완료된 후 콘솔 창이 열리고 닫힙니다.

콘솔 창의 개방을 피하려면 어떻게해야합니까? 솔루션이 플랫폼 독립적 일 수 있다면 행복 할 것입니다. 또한 명령이 완료 될 때까지 내 프로그램이 기다리기를 원합니다.

도움이 되었습니까?

해결책

Windows를 사용하는 것처럼 들립니다.

Linux (및 일반적으로 *nix)에서는 전화를 대체합니다. system 전화로 fork 그리고 exec, 각각. Windows에서는 Windows API에 일종의 Spawn-A-New 프로세스 기능이 있다고 생각합니다.

쉘 명령 및/또는 외부 프로그램을 실행할 때, 귀하의 프로그램은 플랫폼 독립성을 만들기가 어렵습니다. 실행중인 명령 및/또는 외부 프로그램이있는 플랫폼에 따라 달라지기 때문입니다.

다른 팁

이것은 아마도 가장 쉽고 가장 좋은 방법 일 것입니다. 이것은 또한이 명령을 실행하는 동안 프로그램이 정지되지 않도록 만들 것입니다. 처음에는 Windows 헤더를 사용하는 것을 잊지 마십시오.

#include <Windows.h>

그런 다음 명령을 실행하려면 다음 기능을 사용해야합니다.

WinExec("your command", SW_HIDE); 

메모; 그만큼 WinExec 방법은 10 년 넘게 더 이상 사용되지 않았습니다. 그래도 오늘도 여전히 잘 작동합니다. 필요하지 않은 경우이 메소드를 사용해서는 안됩니다.

... 당신 대신 ~하지 않다 사용하고 싶다;

system("your command");

exec ()는 posix와 같이 독립적 인 플랫폼 독립적 인 것처럼 보입니다. Windows에서는 _exec ()이지만 Unix에서 exec ()입니다. http://msdn.microsoft.com/en-us/library/431x4c1w(vs.71).aspx

오류. CreateProcess 또는 ShellExecute.

다음은 새로운 것을없이 명령을 실행하는 방법입니다. cmd.exe 창문. 기반 롤랜드 라비안의 대답 그리고 MSDN, 나는 작업 기능을 작성했다 :

int windows_system(const char *cmd)
{
  PROCESS_INFORMATION p_info;
  STARTUPINFO s_info;
  LPSTR cmdline, programpath;

  memset(&s_info, 0, sizeof(s_info));
  memset(&p_info, 0, sizeof(p_info));
  s_info.cb = sizeof(s_info);

  cmdline     = _tcsdup(TEXT(cmd));
  programpath = _tcsdup(TEXT(cmd));

  if (CreateProcess(programpath, cmdline, NULL, NULL, 0, 0, NULL, NULL, &s_info, &p_info))
  {
    WaitForSingleObject(p_info.hProcess, INFINITE);
    CloseHandle(p_info.hProcess);
    CloseHandle(p_info.hThread);
  }
}

모든 Windows 플랫폼에서 작동합니다. 당신처럼 전화하십시오 system().

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top