Проверка состояния выхода подпроцессов в Windows - PullRequest
1 голос
/ 28 июля 2011

В gEDA у нас есть вспомогательная программа, которая должна создать подпроцесс и проверить его состояние завершения, чтобы убедиться, что он успешно завершен. В Linux мы используем что-то похожее на:

#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;
}

Полный исходный код для программы можно найти в нашем репозитории git.

К сожалению, при компиляции для Windows с использованием MinGW мы обнаружили, что sys/wait.h не существует, равно как и макросы WIFEXITED или WEXITSTATUS. Каков «правильный способ» проверить нормальный выход и получить статус выхода в Windows, используя g_spawn_sync? Google оказался на удивление бесполезным!

Ответы [ 2 ]

0 голосов
/ 31 июля 2011

Документация для g_spawn_async_with_pipes() объясняет, как это сделать в Windows.

0 голосов
/ 28 июля 2011

В Windows API вы обычно создаете процессы, используя CreateProcess. Чтобы получить код ошибки (или «код успеха» ^^), посмотрите здесь: http://msdn.microsoft.com/en-us/library/ms683189%28v=vs.85%29.aspx

...