| 1 | /* Definitions for POSIX spawn interface. | 
|---|
| 2 | Copyright (C) 2000-2018 Free Software Foundation, Inc. | 
|---|
| 3 | This file is part of the GNU C Library. | 
|---|
| 4 |  | 
|---|
| 5 | The GNU C Library is free software; you can redistribute it and/or | 
|---|
| 6 | modify it under the terms of the GNU Lesser General Public | 
|---|
| 7 | License as published by the Free Software Foundation; either | 
|---|
| 8 | version 2.1 of the License, or (at your option) any later version. | 
|---|
| 9 |  | 
|---|
| 10 | The GNU C Library 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 the GNU C Library; if not, see | 
|---|
| 17 | <http://www.gnu.org/licenses/>.  */ | 
|---|
| 18 |  | 
|---|
| 19 | #ifndef	_SPAWN_H | 
|---|
| 20 | #define	_SPAWN_H	1 | 
|---|
| 21 |  | 
|---|
| 22 | #include <features.h> | 
|---|
| 23 | #include <sched.h> | 
|---|
| 24 | #include <sys/types.h> | 
|---|
| 25 | #include <bits/types/sigset_t.h> | 
|---|
| 26 |  | 
|---|
| 27 |  | 
|---|
| 28 | /* Data structure to contain attributes for thread creation.  */ | 
|---|
| 29 | typedef struct | 
|---|
| 30 | { | 
|---|
| 31 | short int __flags; | 
|---|
| 32 | pid_t __pgrp; | 
|---|
| 33 | sigset_t __sd; | 
|---|
| 34 | sigset_t __ss; | 
|---|
| 35 | struct sched_param __sp; | 
|---|
| 36 | int __policy; | 
|---|
| 37 | int __pad[16]; | 
|---|
| 38 | } posix_spawnattr_t; | 
|---|
| 39 |  | 
|---|
| 40 |  | 
|---|
| 41 | /* Data structure to contain information about the actions to be | 
|---|
| 42 | performed in the new process with respect to file descriptors.  */ | 
|---|
| 43 | typedef struct | 
|---|
| 44 | { | 
|---|
| 45 | int __allocated; | 
|---|
| 46 | int __used; | 
|---|
| 47 | struct __spawn_action *__actions; | 
|---|
| 48 | int __pad[16]; | 
|---|
| 49 | } posix_spawn_file_actions_t; | 
|---|
| 50 |  | 
|---|
| 51 |  | 
|---|
| 52 | /* Flags to be set in the `posix_spawnattr_t'.  */ | 
|---|
| 53 | #define POSIX_SPAWN_RESETIDS		0x01 | 
|---|
| 54 | #define POSIX_SPAWN_SETPGROUP		0x02 | 
|---|
| 55 | #define POSIX_SPAWN_SETSIGDEF		0x04 | 
|---|
| 56 | #define POSIX_SPAWN_SETSIGMASK		0x08 | 
|---|
| 57 | #define POSIX_SPAWN_SETSCHEDPARAM	0x10 | 
|---|
| 58 | #define POSIX_SPAWN_SETSCHEDULER	0x20 | 
|---|
| 59 | #ifdef __USE_GNU | 
|---|
| 60 | # define POSIX_SPAWN_USEVFORK		0x40 | 
|---|
| 61 | # define POSIX_SPAWN_SETSID		0x80 | 
|---|
| 62 | #endif | 
|---|
| 63 |  | 
|---|
| 64 |  | 
|---|
| 65 | __BEGIN_DECLS | 
|---|
| 66 |  | 
|---|
| 67 | /* Spawn a new process executing PATH with the attributes describes in *ATTRP. | 
|---|
| 68 | Before running the process perform the actions described in FILE-ACTIONS. | 
|---|
| 69 |  | 
|---|
| 70 | This function is a possible cancellation point and therefore not | 
|---|
| 71 | marked with __THROW. */ | 
|---|
| 72 | extern int posix_spawn (pid_t *__restrict __pid, | 
|---|
| 73 | const char *__restrict __path, | 
|---|
| 74 | const posix_spawn_file_actions_t *__restrict | 
|---|
| 75 | __file_actions, | 
|---|
| 76 | const posix_spawnattr_t *__restrict __attrp, | 
|---|
| 77 | char *const __argv[__restrict_arr], | 
|---|
| 78 | char *const __envp[__restrict_arr]); | 
|---|
| 79 |  | 
|---|
| 80 | /* Similar to `posix_spawn' but search for FILE in the PATH. | 
|---|
| 81 |  | 
|---|
| 82 | This function is a possible cancellation point and therefore not | 
|---|
| 83 | marked with __THROW.  */ | 
|---|
| 84 | extern int posix_spawnp (pid_t *__pid, const char *__file, | 
|---|
| 85 | const posix_spawn_file_actions_t *__file_actions, | 
|---|
| 86 | const posix_spawnattr_t *__attrp, | 
|---|
| 87 | char *const __argv[], char *const __envp[]); | 
|---|
| 88 |  | 
|---|
| 89 |  | 
|---|
| 90 | /* Initialize data structure with attributes for `spawn' to default values.  */ | 
|---|
| 91 | extern int posix_spawnattr_init (posix_spawnattr_t *__attr) __THROW; | 
|---|
| 92 |  | 
|---|
| 93 | /* Free resources associated with ATTR.  */ | 
|---|
| 94 | extern int posix_spawnattr_destroy (posix_spawnattr_t *__attr) __THROW; | 
|---|
| 95 |  | 
|---|
| 96 | /* Store signal mask for signals with default handling from ATTR in | 
|---|
| 97 | SIGDEFAULT.  */ | 
|---|
| 98 | extern int posix_spawnattr_getsigdefault (const posix_spawnattr_t * | 
|---|
| 99 | __restrict __attr, | 
|---|
| 100 | sigset_t *__restrict __sigdefault) | 
|---|
| 101 | __THROW; | 
|---|
| 102 |  | 
|---|
| 103 | /* Set signal mask for signals with default handling in ATTR to SIGDEFAULT.  */ | 
|---|
| 104 | extern int posix_spawnattr_setsigdefault (posix_spawnattr_t *__restrict __attr, | 
|---|
| 105 | const sigset_t *__restrict | 
|---|
| 106 | __sigdefault) | 
|---|
| 107 | __THROW; | 
|---|
| 108 |  | 
|---|
| 109 | /* Store signal mask for the new process from ATTR in SIGMASK.  */ | 
|---|
| 110 | extern int posix_spawnattr_getsigmask (const posix_spawnattr_t *__restrict | 
|---|
| 111 | __attr, | 
|---|
| 112 | sigset_t *__restrict __sigmask) __THROW; | 
|---|
| 113 |  | 
|---|
| 114 | /* Set signal mask for the new process in ATTR to SIGMASK.  */ | 
|---|
| 115 | extern int posix_spawnattr_setsigmask (posix_spawnattr_t *__restrict __attr, | 
|---|
| 116 | const sigset_t *__restrict __sigmask) | 
|---|
| 117 | __THROW; | 
|---|
| 118 |  | 
|---|
| 119 | /* Get flag word from the attribute structure.  */ | 
|---|
| 120 | extern int posix_spawnattr_getflags (const posix_spawnattr_t *__restrict | 
|---|
| 121 | __attr, | 
|---|
| 122 | short int *__restrict __flags) __THROW; | 
|---|
| 123 |  | 
|---|
| 124 | /* Store flags in the attribute structure.  */ | 
|---|
| 125 | extern int posix_spawnattr_setflags (posix_spawnattr_t *_attr, | 
|---|
| 126 | short int __flags) __THROW; | 
|---|
| 127 |  | 
|---|
| 128 | /* Get process group ID from the attribute structure.  */ | 
|---|
| 129 | extern int posix_spawnattr_getpgroup (const posix_spawnattr_t *__restrict | 
|---|
| 130 | __attr, pid_t *__restrict __pgroup) | 
|---|
| 131 | __THROW; | 
|---|
| 132 |  | 
|---|
| 133 | /* Store process group ID in the attribute structure.  */ | 
|---|
| 134 | extern int posix_spawnattr_setpgroup (posix_spawnattr_t *__attr, | 
|---|
| 135 | pid_t __pgroup) __THROW; | 
|---|
| 136 |  | 
|---|
| 137 | /* Get scheduling policy from the attribute structure.  */ | 
|---|
| 138 | extern int posix_spawnattr_getschedpolicy (const posix_spawnattr_t * | 
|---|
| 139 | __restrict __attr, | 
|---|
| 140 | int *__restrict __schedpolicy) | 
|---|
| 141 | __THROW; | 
|---|
| 142 |  | 
|---|
| 143 | /* Store scheduling policy in the attribute structure.  */ | 
|---|
| 144 | extern int posix_spawnattr_setschedpolicy (posix_spawnattr_t *__attr, | 
|---|
| 145 | int __schedpolicy) __THROW; | 
|---|
| 146 |  | 
|---|
| 147 | /* Get scheduling parameters from the attribute structure.  */ | 
|---|
| 148 | extern int posix_spawnattr_getschedparam (const posix_spawnattr_t * | 
|---|
| 149 | __restrict __attr, | 
|---|
| 150 | struct sched_param *__restrict | 
|---|
| 151 | __schedparam) __THROW; | 
|---|
| 152 |  | 
|---|
| 153 | /* Store scheduling parameters in the attribute structure.  */ | 
|---|
| 154 | extern int posix_spawnattr_setschedparam (posix_spawnattr_t *__restrict __attr, | 
|---|
| 155 | const struct sched_param * | 
|---|
| 156 | __restrict __schedparam) __THROW; | 
|---|
| 157 |  | 
|---|
| 158 |  | 
|---|
| 159 | /* Initialize data structure for file attribute for `spawn' call.  */ | 
|---|
| 160 | extern int posix_spawn_file_actions_init (posix_spawn_file_actions_t * | 
|---|
| 161 | __file_actions) __THROW; | 
|---|
| 162 |  | 
|---|
| 163 | /* Free resources associated with FILE-ACTIONS.  */ | 
|---|
| 164 | extern int posix_spawn_file_actions_destroy (posix_spawn_file_actions_t * | 
|---|
| 165 | __file_actions) __THROW; | 
|---|
| 166 |  | 
|---|
| 167 | /* Add an action to FILE-ACTIONS which tells the implementation to call | 
|---|
| 168 | `open' for the given file during the `spawn' call.  */ | 
|---|
| 169 | extern int posix_spawn_file_actions_addopen (posix_spawn_file_actions_t * | 
|---|
| 170 | __restrict __file_actions, | 
|---|
| 171 | int __fd, | 
|---|
| 172 | const char *__restrict __path, | 
|---|
| 173 | int __oflag, mode_t __mode) | 
|---|
| 174 | __THROW; | 
|---|
| 175 |  | 
|---|
| 176 | /* Add an action to FILE-ACTIONS which tells the implementation to call | 
|---|
| 177 | `close' for the given file descriptor during the `spawn' call.  */ | 
|---|
| 178 | extern int posix_spawn_file_actions_addclose (posix_spawn_file_actions_t * | 
|---|
| 179 | __file_actions, int __fd) | 
|---|
| 180 | __THROW; | 
|---|
| 181 |  | 
|---|
| 182 | /* Add an action to FILE-ACTIONS which tells the implementation to call | 
|---|
| 183 | `dup2' for the given file descriptors during the `spawn' call.  */ | 
|---|
| 184 | extern int posix_spawn_file_actions_adddup2 (posix_spawn_file_actions_t * | 
|---|
| 185 | __file_actions, | 
|---|
| 186 | int __fd, int __newfd) __THROW; | 
|---|
| 187 |  | 
|---|
| 188 | __END_DECLS | 
|---|
| 189 |  | 
|---|
| 190 | #endif /* spawn.h */ | 
|---|
| 191 |  | 
|---|