1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License (the "License"). 6 * You may not use this file except in compliance with the License. 7 * 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9 * or http://www.opensolaris.org/os/licensing. 10 * See the License for the specific language governing permissions 11 * and limitations under the License. 12 * 13 * When distributing Covered Code, include this CDDL HEADER in each 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15 * If applicable, add the following below this CDDL HEADER, with the 16 * fields enclosed by brackets "[]" replaced with your own identifying 17 * information: Portions Copyright [yyyy] [name of copyright owner] 18 * 19 * CDDL HEADER END 20 */ 21 22 /* 23 * Copyright 2014 Garrett D'Amore <garrett@damore.org> 24 * 25 * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 26 * Use is subject to license terms. 27 */ 28 29 /* 30 * Copyright (c) 2011 by Delphix. All rights reserved. 31 */ 32 33 #ifndef _SPAWN_H 34 #define _SPAWN_H 35 36 #include <sys/feature_tests.h> 37 #include <sys/types.h> 38 #include <signal.h> 39 #include <sched.h> 40 41 #ifdef __cplusplus 42 extern "C" { 43 #endif 44 45 /* 46 * flags for posix_spawnattr_setflags() 47 */ 48 #define POSIX_SPAWN_RESETIDS 0x0001 49 #define POSIX_SPAWN_SETPGROUP 0x0002 50 #define POSIX_SPAWN_SETSIGDEF 0x0004 51 #define POSIX_SPAWN_SETSIGMASK 0x0008 52 #define POSIX_SPAWN_SETSCHEDPARAM 0x0010 53 #define POSIX_SPAWN_SETSCHEDULER 0x0020 54 /* 55 * non-portable Solaris extensions 56 */ 57 #if !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__) 58 #define POSIX_SPAWN_SETSIGIGN_NP 0x0800 59 #define POSIX_SPAWN_NOSIGCHLD_NP 0x1000 60 #define POSIX_SPAWN_WAITPID_NP 0x2000 61 #define POSIX_SPAWN_NOEXECERR_NP 0x4000 62 #endif /* !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__) */ 63 64 typedef struct { 65 void *__spawn_attrp; /* implementation-private */ 66 } posix_spawnattr_t; 67 68 typedef struct { 69 void *__file_attrp; /* implementation-private */ 70 } posix_spawn_file_actions_t; 71 72 extern int posix_spawn( 73 pid_t *_RESTRICT_KYWD pid, 74 const char *_RESTRICT_KYWD path, 75 const posix_spawn_file_actions_t *file_actions, 76 const posix_spawnattr_t *_RESTRICT_KYWD attrp, 77 char *const argv[_RESTRICT_KYWD], 78 char *const envp[_RESTRICT_KYWD]); 79 80 extern int posix_spawnp( 81 pid_t *_RESTRICT_KYWD pid, 82 const char *_RESTRICT_KYWD file, 83 const posix_spawn_file_actions_t *file_actions, 84 const posix_spawnattr_t *_RESTRICT_KYWD attrp, 85 char *const argv[_RESTRICT_KYWD], 86 char *const envp[_RESTRICT_KYWD]); 87 88 extern int posix_spawn_file_actions_init( 89 posix_spawn_file_actions_t *file_actions); 90 91 extern int posix_spawn_file_actions_destroy( 92 posix_spawn_file_actions_t *file_actions); 93 94 extern int posix_spawn_file_actions_addopen( 95 posix_spawn_file_actions_t *_RESTRICT_KYWD file_actions, 96 int filedes, 97 const char *_RESTRICT_KYWD path, 98 int oflag, 99 mode_t mode); 100 101 extern int posix_spawn_file_actions_addclose( 102 posix_spawn_file_actions_t *file_actions, 103 int filedes); 104 105 extern int posix_spawn_file_actions_adddup2( 106 posix_spawn_file_actions_t *file_actions, 107 int filedes, 108 int newfiledes); 109 110 extern int posix_spawnattr_init( 111 posix_spawnattr_t *attr); 112 113 extern int posix_spawnattr_destroy( 114 posix_spawnattr_t *attr); 115 116 extern int posix_spawnattr_setflags( 117 posix_spawnattr_t *attr, 118 short flags); 119 120 extern int posix_spawnattr_getflags( 121 const posix_spawnattr_t *_RESTRICT_KYWD attr, 122 short *_RESTRICT_KYWD flags); 123 124 extern int posix_spawnattr_setpgroup( 125 posix_spawnattr_t *attr, 126 pid_t pgroup); 127 128 extern int posix_spawnattr_getpgroup( 129 const posix_spawnattr_t *_RESTRICT_KYWD attr, 130 pid_t *_RESTRICT_KYWD pgroup); 131 132 extern int posix_spawnattr_setschedparam( 133 posix_spawnattr_t *_RESTRICT_KYWD attr, 134 const struct sched_param *_RESTRICT_KYWD schedparam); 135 136 extern int posix_spawnattr_getschedparam( 137 const posix_spawnattr_t *_RESTRICT_KYWD attr, 138 struct sched_param *_RESTRICT_KYWD schedparam); 139 140 extern int posix_spawnattr_setschedpolicy( 141 posix_spawnattr_t *attr, 142 int schedpolicy); 143 144 extern int posix_spawnattr_getschedpolicy( 145 const posix_spawnattr_t *_RESTRICT_KYWD attr, 146 int *_RESTRICT_KYWD schedpolicy); 147 148 extern int posix_spawnattr_setsigdefault( 149 posix_spawnattr_t *_RESTRICT_KYWD attr, 150 const sigset_t *_RESTRICT_KYWD sigdefault); 151 152 extern int posix_spawnattr_getsigdefault( 153 const posix_spawnattr_t *_RESTRICT_KYWD attr, 154 sigset_t *_RESTRICT_KYWD sigdefault); 155 156 /* 157 * non-portable Solaris extensions 158 */ 159 #if !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__) 160 161 extern int posix_spawn_pipe_np( 162 pid_t *_RESTRICT_KYWD pidp, 163 int *_RESTRICT_KYWD fdp, 164 const char *_RESTRICT_KYWD cmd, 165 boolean_t write, 166 posix_spawn_file_actions_t *_RESTRICT_KYWD fact, 167 posix_spawnattr_t *_RESTRICT_KYWD attr); 168 169 extern int posix_spawn_file_actions_addclosefrom_np( 170 posix_spawn_file_actions_t *file_actions, 171 int lowfiledes); 172 173 extern int posix_spawnattr_setsigignore_np( 174 posix_spawnattr_t *_RESTRICT_KYWD attr, 175 const sigset_t *_RESTRICT_KYWD sigignore); 176 177 extern int posix_spawnattr_getsigignore_np( 178 const posix_spawnattr_t *_RESTRICT_KYWD attr, 179 sigset_t *_RESTRICT_KYWD sigignore); 180 181 #endif /* !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__) */ 182 183 extern int posix_spawnattr_setsigmask( 184 posix_spawnattr_t *_RESTRICT_KYWD attr, 185 const sigset_t *_RESTRICT_KYWD sigmask); 186 187 extern int posix_spawnattr_getsigmask( 188 const posix_spawnattr_t *_RESTRICT_KYWD attr, 189 sigset_t *_RESTRICT_KYWD sigmask); 190 191 #ifdef __cplusplus 192 } 193 #endif 194 195 #endif /* _SPAWN_H */ 196