1 /** 2 * @file process.h 3 * Copyright 2012, 2013 MinGW.org project 4 * 5 * Permission is hereby granted, free of charge, to any person obtaining a 6 * copy of this software and associated documentation files (the "Software"), 7 * to deal in the Software without restriction, including without limitation 8 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 9 * and/or sell copies of the Software, and to permit persons to whom the 10 * Software is furnished to do so, subject to the following conditions: 11 * 12 * The above copyright notice and this permission notice (including the next 13 * paragraph) shall be included in all copies or substantial portions of the 14 * Software. 15 * 16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 21 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 22 * DEALINGS IN THE SOFTWARE. 23 */ 24 #ifndef _PROCESS_H_ 25 #define _PROCESS_H_ 26 #pragma GCC system_header 27 #include <_mingw.h> 28 29 /* 30 * Function calls for spawning child processes. 31 */ 32 33 #include <sys/types.h> /* For _pid_t and pid_t. */ 34 #include <stdint.h> /* For intptr_t. */ 35 /* 36 * Constants for cwait actions. 37 * Obsolete for Win32. 38 */ 39 #define _WAIT_CHILD 0 40 #define _WAIT_GRANDCHILD 1 41 42 #ifndef _NO_OLDNAMES 43 #define WAIT_CHILD _WAIT_CHILD 44 #define WAIT_GRANDCHILD _WAIT_GRANDCHILD 45 #endif /* Not _NO_OLDNAMES */ 46 47 /* 48 * Mode constants for spawn functions. 49 */ 50 #define _P_WAIT 0 51 #define _P_NOWAIT 1 52 #define _P_OVERLAY 2 53 #define _OLD_P_OVERLAY _P_OVERLAY 54 #define _P_NOWAITO 3 55 #define _P_DETACH 4 56 57 #ifndef _NO_OLDNAMES 58 #define P_WAIT _P_WAIT 59 #define P_NOWAIT _P_NOWAIT 60 #define P_OVERLAY _P_OVERLAY 61 #define OLD_P_OVERLAY _OLD_P_OVERLAY 62 #define P_NOWAITO _P_NOWAITO 63 #define P_DETACH _P_DETACH 64 #endif /* Not _NO_OLDNAMES */ 65 66 67 #ifndef RC_INVOKED 68 69 #ifdef __cplusplus 70 extern "C" { 71 #endif 72 73 _CRTIMP void __cdecl __MINGW_NOTHROW _cexit(void); 74 _CRTIMP void __cdecl __MINGW_NOTHROW _c_exit(void); 75 76 _CRTIMP int __cdecl __MINGW_NOTHROW _cwait (int*, _pid_t, int); 77 78 _CRTIMP _pid_t __cdecl __MINGW_NOTHROW _getpid(void); 79 80 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW _execl (const char*, const char*, ...); 81 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW _execle (const char*, const char*, ...); 82 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW _execlp (const char*, const char*, ...); 83 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW _execlpe (const char*, const char*, ...); 84 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW _execv (const char*, const char* const*); 85 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW _execve (const char*, const char* const*, const char* const*); 86 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW _execvp (const char*, const char* const*); 87 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW _execvpe (const char*, const char* const*, const char* const*); 88 89 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW _spawnl (int, const char*, const char*, ...); 90 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW _spawnle (int, const char*, const char*, ...); 91 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW _spawnlp (int, const char*, const char*, ...); 92 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW _spawnlpe (int, const char*, const char*, ...); 93 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW _spawnv (int, const char*, const char* const*); 94 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW _spawnve (int, const char*, const char* const*, const char* const*); 95 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW _spawnvp (int, const char*, const char* const*); 96 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW _spawnvpe (int, const char*, const char* const*, const char* const*); 97 98 #ifndef _WPROCESS_DEFINED 99 /* Also in wchar.h - keep in sync */ 100 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW _wexecl (const wchar_t*, const wchar_t*, ...); 101 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW _wexecle (const wchar_t*, const wchar_t*, ...); 102 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW _wexeclp (const wchar_t*, const wchar_t*, ...); 103 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW _wexeclpe (const wchar_t*, const wchar_t*, ...); 104 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW _wexecv (const wchar_t*, const wchar_t* const*); 105 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW _wexecve (const wchar_t*, const wchar_t* const*, const wchar_t* const*); 106 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW _wexecvp (const wchar_t*, const wchar_t* const*); 107 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW _wexecvpe (const wchar_t*, const wchar_t* const*, const wchar_t* const*); 108 109 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW _wspawnl (int, const wchar_t*, const wchar_t*, ...); 110 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW _wspawnle (int, const wchar_t*, const wchar_t*, ...); 111 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW _wspawnlp (int, const wchar_t*, const wchar_t*, ...); 112 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW _wspawnlpe (int, const wchar_t*, const wchar_t*, ...); 113 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW _wspawnv (int, const wchar_t*, const wchar_t* const*); 114 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW _wspawnve (int, const wchar_t*, const wchar_t* const*, const wchar_t* const*); 115 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW _wspawnvp (int, const wchar_t*, const wchar_t* const*); 116 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW _wspawnvpe (int, const wchar_t*, const wchar_t* const*, const wchar_t* const*); 117 118 #define _WPROCESS_DEFINED 119 #endif 120 121 /* 122 * NOTE: Apparently _endthread calls CloseHandle on the handle of the thread, 123 * making for race conditions if you are not careful. Basically you have to 124 * make sure that no-one is going to do *anything* with the thread handle 125 * after the thread calls _endthread or returns from the thread function. 126 * 127 * NOTE: No old names for these functions. Use the underscore. 128 */ 129 _CRTIMP unsigned long __cdecl __MINGW_NOTHROW 130 _beginthread (void (*)(void *), unsigned, void*); 131 _CRTIMP void __cdecl __MINGW_NOTHROW _endthread (void); 132 133 _CRTIMP unsigned long __cdecl __MINGW_NOTHROW 134 _beginthreadex (void *, unsigned, unsigned (__stdcall *) (void *), 135 void*, unsigned, unsigned*); 136 _CRTIMP void __cdecl __MINGW_NOTHROW _endthreadex (unsigned); 137 138 #ifndef _NO_OLDNAMES 139 /* 140 * Functions without the leading underscore, for portability. These functions 141 * live in liboldnames.a. 142 */ 143 _CRTIMP int __cdecl __MINGW_NOTHROW cwait (int*, pid_t, int); 144 _CRTIMP pid_t __cdecl __MINGW_NOTHROW getpid (void); 145 146 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW execl (const char*, const char*, ...); 147 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW execle (const char*, const char*, ...); 148 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW execlp (const char*, const char*, ...); 149 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW execlpe (const char*, const char*,...); 150 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW execv (const char*, const char* const*); 151 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW execve (const char*, const char* const*, const char* const*); 152 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW execvp (const char*, const char* const*); 153 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW execvpe (const char*, const char* const*, const char* const*); 154 155 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW spawnl (int, const char*, const char*, ...); 156 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW spawnle (int, const char*, const char*, ...); 157 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW spawnlp (int, const char*, const char*, ...); 158 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW spawnlpe (int, const char*, const char*, ...); 159 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW spawnv (int, const char*, const char* const*); 160 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW spawnve (int, const char*, const char* const*, const char* const*); 161 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW spawnvp (int, const char*, const char* const*); 162 _CRTIMP intptr_t __cdecl __MINGW_NOTHROW spawnvpe (int, const char*, const char* const*, const char* const*); 163 #endif /* Not _NO_OLDNAMES */ 164 165 #ifdef __cplusplus 166 } 167 #endif 168 169 #endif /* Not RC_INVOKED */ 170 171 #endif /* _PROCESS_H_ not defined */ 172