1 /* gspawn.h - Process launching 2 * 3 * Copyright 2000 Red Hat, Inc. 4 * 5 * GLib is free software; you can redistribute it and/or 6 * modify it under the terms of the GNU Lesser General Public License as 7 * published by the Free Software Foundation; either version 2 of the 8 * License, or (at your option) any later version. 9 * 10 * GLib is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 * Lesser General Public License for more details. 14 * 15 * You should have received a copy of the GNU Lesser General Public 16 * License along with GLib; see the file COPYING.LIB. If not, write 17 * to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 18 * Boston, MA 02111-1307, USA. 19 */ 20 21 #if defined(G_DISABLE_SINGLE_INCLUDES) && !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) 22 #error "Only <glib.h> can be included directly." 23 #endif 24 25 #ifndef __G_SPAWN_H__ 26 #define __G_SPAWN_H__ 27 28 #include <glib/gerror.h> 29 30 G_BEGIN_DECLS 31 32 /* I'm not sure I remember our proposed naming convention here. */ 33 #define G_SPAWN_ERROR g_spawn_error_quark () 34 35 typedef enum 36 { 37 G_SPAWN_ERROR_FORK, /* fork failed due to lack of memory */ 38 G_SPAWN_ERROR_READ, /* read or select on pipes failed */ 39 G_SPAWN_ERROR_CHDIR, /* changing to working dir failed */ 40 G_SPAWN_ERROR_ACCES, /* execv() returned EACCES */ 41 G_SPAWN_ERROR_PERM, /* execv() returned EPERM */ 42 G_SPAWN_ERROR_2BIG, /* execv() returned E2BIG */ 43 G_SPAWN_ERROR_NOEXEC, /* execv() returned ENOEXEC */ 44 G_SPAWN_ERROR_NAMETOOLONG, /* "" "" ENAMETOOLONG */ 45 G_SPAWN_ERROR_NOENT, /* "" "" ENOENT */ 46 G_SPAWN_ERROR_NOMEM, /* "" "" ENOMEM */ 47 G_SPAWN_ERROR_NOTDIR, /* "" "" ENOTDIR */ 48 G_SPAWN_ERROR_LOOP, /* "" "" ELOOP */ 49 G_SPAWN_ERROR_TXTBUSY, /* "" "" ETXTBUSY */ 50 G_SPAWN_ERROR_IO, /* "" "" EIO */ 51 G_SPAWN_ERROR_NFILE, /* "" "" ENFILE */ 52 G_SPAWN_ERROR_MFILE, /* "" "" EMFLE */ 53 G_SPAWN_ERROR_INVAL, /* "" "" EINVAL */ 54 G_SPAWN_ERROR_ISDIR, /* "" "" EISDIR */ 55 G_SPAWN_ERROR_LIBBAD, /* "" "" ELIBBAD */ 56 G_SPAWN_ERROR_FAILED /* other fatal failure, error->message 57 * should explain 58 */ 59 } GSpawnError; 60 61 typedef void (* GSpawnChildSetupFunc) (gpointer user_data); 62 63 typedef enum 64 { 65 G_SPAWN_LEAVE_DESCRIPTORS_OPEN = 1 << 0, 66 G_SPAWN_DO_NOT_REAP_CHILD = 1 << 1, 67 /* look for argv[0] in the path i.e. use execvp() */ 68 G_SPAWN_SEARCH_PATH = 1 << 2, 69 /* Dump output to /dev/null */ 70 G_SPAWN_STDOUT_TO_DEV_NULL = 1 << 3, 71 G_SPAWN_STDERR_TO_DEV_NULL = 1 << 4, 72 G_SPAWN_CHILD_INHERITS_STDIN = 1 << 5, 73 G_SPAWN_FILE_AND_ARGV_ZERO = 1 << 6 74 } GSpawnFlags; 75 76 GQuark g_spawn_error_quark (void); 77 78 #ifdef G_OS_WIN32 79 #define g_spawn_async g_spawn_async_utf8 80 #define g_spawn_async_with_pipes g_spawn_async_with_pipes_utf8 81 #define g_spawn_sync g_spawn_sync_utf8 82 #define g_spawn_command_line_sync g_spawn_command_line_sync_utf8 83 #define g_spawn_command_line_async g_spawn_command_line_async_utf8 84 #endif 85 86 gboolean g_spawn_async (const gchar *working_directory, 87 gchar **argv, 88 gchar **envp, 89 GSpawnFlags flags, 90 GSpawnChildSetupFunc child_setup, 91 gpointer user_data, 92 GPid *child_pid, 93 GError **error); 94 95 96 /* Opens pipes for non-NULL standard_output, standard_input, standard_error, 97 * and returns the parent's end of the pipes. 98 */ 99 gboolean g_spawn_async_with_pipes (const gchar *working_directory, 100 gchar **argv, 101 gchar **envp, 102 GSpawnFlags flags, 103 GSpawnChildSetupFunc child_setup, 104 gpointer user_data, 105 GPid *child_pid, 106 gint *standard_input, 107 gint *standard_output, 108 gint *standard_error, 109 GError **error); 110 111 112 /* If standard_output or standard_error are non-NULL, the full 113 * standard output or error of the command will be placed there. 114 */ 115 116 gboolean g_spawn_sync (const gchar *working_directory, 117 gchar **argv, 118 gchar **envp, 119 GSpawnFlags flags, 120 GSpawnChildSetupFunc child_setup, 121 gpointer user_data, 122 gchar **standard_output, 123 gchar **standard_error, 124 gint *exit_status, 125 GError **error); 126 127 gboolean g_spawn_command_line_sync (const gchar *command_line, 128 gchar **standard_output, 129 gchar **standard_error, 130 gint *exit_status, 131 GError **error); 132 gboolean g_spawn_command_line_async (const gchar *command_line, 133 GError **error); 134 135 void g_spawn_close_pid (GPid pid); 136 137 G_END_DECLS 138 139 #endif /* __G_SPAWN_H__ */ 140