2011-07-28 2 views
1

gEDA에는 서브 프로세스를 작성하고 종료 상태를 점검하여 성공적으로 완료되었는지 확인해야하는 도우 프로그램이 있습니다.Windows에서 서브 프로세스의 종료 상태 확인

#include <glib.h> 
#include <sys/wait.h> 

static gboolean 
build_and_run_command (const gchar *format, ...) 
{ 
    int result, status; 
    gchar *args, *standard_error; 
    GError *error = NULL; 

    /* Set up argument variables */ 

    if (g_spawn_sync (".", 
        args, 
        NULL, 
        G_SPAWN_SEARCH_PATH | G_SPAWN_STDOUT_TO_DEV_NULL, 
        NULL, 
        NULL, 
        NULL, 
        &standard_error, 
        &status, 
        &error)) { 
    result = (WIFEXITED (status) && WEXITSTATUS(status) == 0); 
    } 

    /* Clean up */ 

    return result; 
} 

full source code for the program는 우리의 자식 저장소에서 찾을 수 있습니다 리눅스에, 우리는 비슷한을 사용합니다.

불행히도, MinGW를 사용하여 Windows 용으로 컴파일 할 때 sys/wait.h이없고, WIFEXITED 또는 WEXITSTATUS 매크로가 없음을 발견했습니다. g_spawn_sync을 사용하여 정상 종료를 확인하고 Windows에서 종료 상태를 검색하는 "올바른 방법"은 무엇입니까? Google은 놀라 울 정도로 도움이되지 않았습니다!

+1

Dunno 처음에는 왜 리눅스 시스템 헤더가 과부에서 작동 할 것이라고 기대 했는가 ... – Necrolis

+2

나는 Windows에서 전혀 작동하지 않을 것으로 기대하며 거의 실망하지 않는다. 위의 코드는 Windows 이외의 모든 것에 작동합니다. 누군가 그것을 지원하기 위해 그것을 수정하는 방법을 제안 할 수 있기를 바랬습니다. –

답변

0

설명서는 Windows에서 수행하는 방법을 설명합니다.

0

Windows API에서 일반적으로 CreateProcess를 사용하여 프로세스를 만듭니다. 오류 코드 (또는 "성공 코드"^^)를 보려면 다음을 참조하십시오. http://msdn.microsoft.com/en-us/library/ms683189%28v=vs.85%29.aspx

+0

이상적으로는 최소한의 이식성이없는 코드를 작성해야하기 때문에 서브 프로세스 작업에 GLib 함수를 사용하고 싶습니다. –