xref: /illumos-gate/usr/src/head/spawn.h (revision fcf3ce44)
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 2008 Sun Microsystems, Inc.  All rights reserved.
24  * Use is subject to license terms.
25  */
26 
27 #ifndef _SPAWN_H
28 #define	_SPAWN_H
29 
30 #include <sys/feature_tests.h>
31 #include <sys/types.h>
32 #include <signal.h>
33 #include <sched.h>
34 
35 #ifdef	__cplusplus
36 extern "C" {
37 #endif
38 
39 /*
40  * flags for posix_spawnattr_setflags()
41  */
42 #define	POSIX_SPAWN_RESETIDS		0x0001
43 #define	POSIX_SPAWN_SETPGROUP		0x0002
44 #define	POSIX_SPAWN_SETSIGDEF		0x0004
45 #define	POSIX_SPAWN_SETSIGMASK		0x0008
46 #define	POSIX_SPAWN_SETSCHEDPARAM	0x0010
47 #define	POSIX_SPAWN_SETSCHEDULER	0x0020
48 /*
49  * non-portable Solaris extensions
50  */
51 #define	POSIX_SPAWN_NOSIGCHLD_NP	0x1000
52 #define	POSIX_SPAWN_WAITPID_NP		0x2000
53 #define	POSIX_SPAWN_NOEXECERR_NP	0x4000
54 
55 typedef struct {
56 	void *__spawn_attrp;	/* implementation-private */
57 } posix_spawnattr_t;
58 
59 typedef struct {
60 	void *__file_attrp;	/* implementation-private */
61 } posix_spawn_file_actions_t;
62 
63 #if defined(__STDC__)
64 
65 extern int posix_spawn(
66 	pid_t *_RESTRICT_KYWD pid,
67 	const char *_RESTRICT_KYWD path,
68 	const posix_spawn_file_actions_t *file_actions,
69 	const posix_spawnattr_t *_RESTRICT_KYWD attrp,
70 	char *const argv[_RESTRICT_KYWD],
71 	char *const envp[_RESTRICT_KYWD]);
72 
73 extern int posix_spawnp(
74 	pid_t *_RESTRICT_KYWD pid,
75 	const char *_RESTRICT_KYWD file,
76 	const posix_spawn_file_actions_t *file_actions,
77 	const posix_spawnattr_t *_RESTRICT_KYWD attrp,
78 	char *const argv[_RESTRICT_KYWD],
79 	char *const envp[_RESTRICT_KYWD]);
80 
81 extern int posix_spawn_file_actions_init(
82 	posix_spawn_file_actions_t *file_actions);
83 
84 extern int posix_spawn_file_actions_destroy(
85 	posix_spawn_file_actions_t *file_actions);
86 
87 extern int posix_spawn_file_actions_addopen(
88 	posix_spawn_file_actions_t *_RESTRICT_KYWD file_actions,
89 	int filedes,
90 	const char *_RESTRICT_KYWD path,
91 	int oflag,
92 	mode_t mode);
93 
94 extern int posix_spawn_file_actions_addclose(
95 	posix_spawn_file_actions_t *file_actions,
96 	int filedes);
97 
98 extern int posix_spawn_file_actions_adddup2(
99 	posix_spawn_file_actions_t *file_actions,
100 	int filedes,
101 	int newfiledes);
102 
103 extern int posix_spawnattr_init(
104 	posix_spawnattr_t *attr);
105 
106 extern int posix_spawnattr_destroy(
107 	posix_spawnattr_t *attr);
108 
109 extern int posix_spawnattr_setflags(
110 	posix_spawnattr_t *attr,
111 	short flags);
112 
113 extern int posix_spawnattr_getflags(
114 	const posix_spawnattr_t *_RESTRICT_KYWD attr,
115 	short *_RESTRICT_KYWD flags);
116 
117 extern int posix_spawnattr_setpgroup(
118 	posix_spawnattr_t *attr,
119 	pid_t pgroup);
120 
121 extern int posix_spawnattr_getpgroup(
122 	const posix_spawnattr_t *_RESTRICT_KYWD attr,
123 	pid_t *_RESTRICT_KYWD pgroup);
124 
125 extern int posix_spawnattr_setschedparam(
126 	posix_spawnattr_t *_RESTRICT_KYWD attr,
127 	const struct sched_param *_RESTRICT_KYWD schedparam);
128 
129 extern int posix_spawnattr_getschedparam(
130 	const posix_spawnattr_t *_RESTRICT_KYWD attr,
131 	struct sched_param *_RESTRICT_KYWD schedparam);
132 
133 extern int posix_spawnattr_setschedpolicy(
134 	posix_spawnattr_t *attr,
135 	int schedpolicy);
136 
137 extern int posix_spawnattr_getschedpolicy(
138 	const posix_spawnattr_t *_RESTRICT_KYWD attr,
139 	int *_RESTRICT_KYWD schedpolicy);
140 
141 extern int posix_spawnattr_setsigdefault(
142 	posix_spawnattr_t *_RESTRICT_KYWD attr,
143 	const sigset_t *_RESTRICT_KYWD sigdefault);
144 
145 extern int posix_spawnattr_getsigdefault(
146 	const posix_spawnattr_t *_RESTRICT_KYWD attr,
147 	sigset_t *_RESTRICT_KYWD sigdefault);
148 
149 extern int posix_spawnattr_setsigmask(
150 	posix_spawnattr_t *_RESTRICT_KYWD attr,
151 	const sigset_t *_RESTRICT_KYWD sigmask);
152 
153 extern int posix_spawnattr_getsigmask(
154 	const posix_spawnattr_t *_RESTRICT_KYWD attr,
155 	sigset_t *_RESTRICT_KYWD sigmask);
156 
157 #else	/* __STDC__ */
158 
159 extern int posix_spawn();
160 extern int posix_spawnp();
161 extern int posix_spawn_file_actions_init();
162 extern int posix_spawn_file_actions_destroy();
163 extern int posix_spawn_file_actions_addopen();
164 extern int posix_spawn_file_actions_addclose();
165 extern int posix_spawn_file_actions_adddup2();
166 extern int posix_spawnattr_init();
167 extern int posix_spawnattr_destroy();
168 extern int posix_spawnattr_setflags();
169 extern int posix_spawnattr_getflags();
170 extern int posix_spawnattr_setpgroup();
171 extern int posix_spawnattr_getpgroup();
172 extern int posix_spawnattr_setschedparam();
173 extern int posix_spawnattr_getschedparam();
174 extern int posix_spawnattr_setschedpolicy();
175 extern int posix_spawnattr_getschedpolicy();
176 extern int posix_spawnattr_setsigdefault();
177 extern int posix_spawnattr_getsigdefault();
178 extern int posix_spawnattr_setsigmask();
179 extern int posix_spawnattr_getsigmask();
180 
181 #endif	/* __STDC__ */
182 
183 #ifdef	__cplusplus
184 }
185 #endif
186 
187 #endif	/* _SPAWN_H */
188