В 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 оказался на удивление бесполезным!