2011-07-28 4 views
1

Dans gEDA, nous avons un programme d'assistance qui doit créer un sous-processus et vérifier son état de sortie pour s'assurer qu'il s'est terminé avec succès. Sous Linux, nous utilisons quelque chose de similaire à:Vérification du statut de sortie des sous-processus sur 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; 
} 

Le full source code for the program se trouve dans notre dépôt git.

Malheureusement, lors de la compilation pour Windows en utilisant MinGW, nous avons découvert que sys/wait.h n'existe pas, et ni ne les WIFEXITED ou WEXITSTATUS macros. Quelle est la «bonne façon» de vérifier une sortie normale et de récupérer le statut de sortie sur Windows en utilisant g_spawn_sync? Google a été étonnamment inutile!

+1

Je ne sais pas pourquoi vous vous attendiez à ce que l'en-tête système Linux fonctionne sur les veuves en premier lieu ... – Necrolis

+2

Je ne m'attends à rien du tout sur Windows, et je suis rarement déçu. Le code ci-dessus fonctionne sur tout autre chose que Windows; J'espérais que quelqu'un pourrait suggérer comment le modifier pour le soutenir aussi. –

Répondre

0

Dans l'API Windows, vous créez normalement des processus à l'aide de CreateProcess. Pour obtenir le code d'erreur (ou "code de succès" ^^) jetez un oeil ici: http://msdn.microsoft.com/en-us/library/ms683189%28v=vs.85%29.aspx

+0

Idéalement, je veux utiliser les fonctions GLib pour travailler avec des sous-processus, de sorte que le minimum de code non-portable possible doit être écrit. –

Questions connexes