1/* Definitions for POSIX spawn interface.
2 Copyright (C) 2000-2019 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. */
29typedef 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. */
43typedef 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. */
72extern 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. */
84extern 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. */
91extern int posix_spawnattr_init (posix_spawnattr_t *__attr) __THROW;
92
93/* Free resources associated with ATTR. */
94extern int posix_spawnattr_destroy (posix_spawnattr_t *__attr) __THROW;
95
96/* Store signal mask for signals with default handling from ATTR in
97 SIGDEFAULT. */
98extern 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. */
104extern 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. */
110extern 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. */
115extern 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. */
120extern 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. */
125extern int posix_spawnattr_setflags (posix_spawnattr_t *_attr,
126 short int __flags) __THROW;
127
128/* Get process group ID from the attribute structure. */
129extern 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. */
134extern int posix_spawnattr_setpgroup (posix_spawnattr_t *__attr,
135 pid_t __pgroup) __THROW;
136
137/* Get scheduling policy from the attribute structure. */
138extern 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. */
144extern int posix_spawnattr_setschedpolicy (posix_spawnattr_t *__attr,
145 int __schedpolicy) __THROW;
146
147/* Get scheduling parameters from the attribute structure. */
148extern 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. */
154extern 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. */
160extern int posix_spawn_file_actions_init (posix_spawn_file_actions_t *
161 __file_actions) __THROW;
162
163/* Free resources associated with FILE-ACTIONS. */
164extern 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. */
169extern 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. */
178extern 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. */
184extern int posix_spawn_file_actions_adddup2 (posix_spawn_file_actions_t *
185 __file_actions,
186 int __fd, int __newfd) __THROW;
187
188#ifdef __USE_GNU
189/* Add an action changing the directory to PATH during spawn. This
190 affects the subsequent file actions. */
191extern int posix_spawn_file_actions_addchdir_np (posix_spawn_file_actions_t *,
192 const char *__path) __THROW;
193
194/* Add an action changing the directory to FD during spawn. This
195 affects the subsequent file actions. FD is not duplicated and must
196 be open when the file action is executed. */
197extern int posix_spawn_file_actions_addfchdir_np (posix_spawn_file_actions_t *,
198 int __fd) __THROW;
199#endif
200
201__END_DECLS
202
203#endif /* spawn.h */
204