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 2009 Sun Microsystems, Inc.  All rights reserved.
  24  * Use is subject to license terms.
  25  */
  26 
  27 /*
  28  * Copyright (c) 2011 by Delphix. All rights reserved.
  29  */
  30 
  31 #ifndef _SPAWN_H
  32 #define _SPAWN_H
  33 
  34 #include <sys/feature_tests.h>
  35 #include <sys/types.h>
  36 #include <signal.h>
  37 #include <sched.h>
  38 
  39 #ifdef  __cplusplus
  40 extern "C" {
  41 #endif
  42 
  43 /*
  44  * flags for posix_spawnattr_setflags()
  45  */
  46 #define POSIX_SPAWN_RESETIDS            0x0001
  47 #define POSIX_SPAWN_SETPGROUP           0x0002
  48 #define POSIX_SPAWN_SETSIGDEF           0x0004
  49 #define POSIX_SPAWN_SETSIGMASK          0x0008
  50 #define POSIX_SPAWN_SETSCHEDPARAM       0x0010
  51 #define POSIX_SPAWN_SETSCHEDULER        0x0020
  52 /*
  53  * non-portable Solaris extensions
  54  */
  55 #if !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__)
  56 #define POSIX_SPAWN_SETSIGIGN_NP        0x0800
  57 #define POSIX_SPAWN_NOSIGCHLD_NP        0x1000
  58 #define POSIX_SPAWN_WAITPID_NP          0x2000
  59 #define POSIX_SPAWN_NOEXECERR_NP        0x4000
  60 #endif  /* !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__) */
  61 
  62 typedef struct {
  63         void *__spawn_attrp;    /* implementation-private */
  64 } posix_spawnattr_t;
  65 
  66 typedef struct {
  67         void *__file_attrp;     /* implementation-private */
  68 } posix_spawn_file_actions_t;
  69 
  70 #if defined(__STDC__)
  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 #else   /* __STDC__ */
 192 
 193 extern int posix_spawn();
 194 extern int posix_spawnp();
 195 extern int posix_spawn_file_actions_init();
 196 extern int posix_spawn_file_actions_destroy();
 197 extern int posix_spawn_file_actions_addopen();
 198 extern int posix_spawn_file_actions_addclose();
 199 extern int posix_spawn_file_actions_adddup2();
 200 extern int posix_spawnattr_init();
 201 extern int posix_spawnattr_destroy();
 202 extern int posix_spawnattr_setflags();
 203 extern int posix_spawnattr_getflags();
 204 extern int posix_spawnattr_setpgroup();
 205 extern int posix_spawnattr_getpgroup();
 206 extern int posix_spawnattr_setschedparam();
 207 extern int posix_spawnattr_getschedparam();
 208 extern int posix_spawnattr_setschedpolicy();
 209 extern int posix_spawnattr_getschedpolicy();
 210 extern int posix_spawnattr_setsigdefault();
 211 extern int posix_spawnattr_getsigdefault();
 212 #if !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__)
 213 extern int posix_spawn_pipe_np();
 214 extern int posix_spawn_file_actions_addclosefrom_np();
 215 extern int posix_spawnattr_setsigignore_np();
 216 extern int posix_spawnattr_getsigignore_np();
 217 #endif  /* !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__) */
 218 extern int posix_spawnattr_setsigmask();
 219 extern int posix_spawnattr_getsigmask();
 220 
 221 #endif  /* __STDC__ */
 222 
 223 #ifdef  __cplusplus
 224 }
 225 #endif
 226 
 227 #endif  /* _SPAWN_H */