1/* 2 * Copyright (c) 2006, 2010 Apple Inc. All rights reserved. 3 * 4 * @APPLE_LICENSE_HEADER_START@ 5 * 6 * This file contains Original Code and/or Modifications of Original Code 7 * as defined in and that are subject to the Apple Public Source License 8 * Version 2.0 (the 'License'). You may not use this file except in 9 * compliance with the License. Please obtain a copy of the License at 10 * http://www.opensource.apple.com/apsl/ and read it before using this 11 * file. 12 * 13 * The Original Code and all software distributed under the License are 14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 18 * Please see the License for the specific language governing rights and 19 * limitations under the License. 20 * 21 * @APPLE_LICENSE_HEADER_END@ 22 */ 23 24 25#ifndef _SPAWN_H_ 26#define _SPAWN_H_ 27 28/* 29 * [SPN] Support for _POSIX_SPAWN 30 */ 31 32#include <sys/cdefs.h> 33#include <_types.h> 34#include <sys/spawn.h> /* shared types */ 35 36#include <Availability.h> 37 38/* 39 * [SPN] Inclusion of the <spawn.h> header may make visible symbols defined 40 * in the <sched.h>, <signal.h>, and <sys/types.h> headers. 41 */ 42#include <sys/_types/_pid_t.h> 43#include <sys/_types/_sigset_t.h> 44#include <sys/_types/_mode_t.h> 45 46/* 47 * Opaque types for use with posix_spawn() family functions. Internals are 48 * not defined, and should not be accessed directly. Types are defined as 49 * mandated by POSIX. 50 */ 51typedef void *posix_spawnattr_t; 52typedef void *posix_spawn_file_actions_t; 53 54__BEGIN_DECLS 55/* 56 * gcc under c99 mode won't compile "[ __restrict]" by itself. As a workaround, 57 * a dummy argument name is added. 58 */ 59int posix_spawn(pid_t * __restrict, const char * __restrict, 60 const posix_spawn_file_actions_t *, 61 const posix_spawnattr_t * __restrict, 62 char *const __argv[ __restrict], 63 char *const __envp[ __restrict]) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0); 64int posix_spawnp(pid_t * __restrict, const char * __restrict, 65 const posix_spawn_file_actions_t *, 66 const posix_spawnattr_t * __restrict, 67 char *const __argv[ __restrict], 68 char *const __envp[ __restrict]) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0); 69int posix_spawn_file_actions_addclose(posix_spawn_file_actions_t *, int) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0); 70int posix_spawn_file_actions_adddup2(posix_spawn_file_actions_t *, int, 71 int) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0); 72int posix_spawn_file_actions_addopen( 73 posix_spawn_file_actions_t * __restrict, int, 74 const char * __restrict, int, mode_t) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0); 75int posix_spawn_file_actions_destroy(posix_spawn_file_actions_t *) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0); 76int posix_spawn_file_actions_init(posix_spawn_file_actions_t *) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0); 77int posix_spawnattr_destroy(posix_spawnattr_t *) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0); 78int posix_spawnattr_getsigdefault(const posix_spawnattr_t * __restrict, 79 sigset_t * __restrict) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0); 80int posix_spawnattr_getflags(const posix_spawnattr_t * __restrict, 81 short * __restrict) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0); 82int posix_spawnattr_getpgroup(const posix_spawnattr_t * __restrict, 83 pid_t * __restrict) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0); 84int posix_spawnattr_getsigmask(const posix_spawnattr_t * __restrict, 85 sigset_t * __restrict) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0); 86int posix_spawnattr_init(posix_spawnattr_t *) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0); 87int posix_spawnattr_setsigdefault(posix_spawnattr_t * __restrict, 88 const sigset_t * __restrict) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0); 89int posix_spawnattr_setflags(posix_spawnattr_t *, short) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0); 90int posix_spawnattr_setpgroup(posix_spawnattr_t *, pid_t) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0); 91int posix_spawnattr_setsigmask(posix_spawnattr_t * __restrict, 92 const sigset_t * __restrict) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0); 93 94#if 0 /* _POSIX_PRIORITY_SCHEDULING [PS] : not supported */ 95int posix_spawnattr_setschedparam(posix_spawnattr_t * __restrict, 96 const struct sched_param * __restrict); 97int posix_spawnattr_setschedpolicy(posix_spawnattr_t *, int); 98int posix_spawnattr_getschedparam(const posix_spawnattr_t * __restrict, 99 struct sched_param * __restrict); 100int posix_spawnattr_getschedpolicy(const posix_spawnattr_t * __restrict, 101 int * __restrict); 102#endif /* 0 */ 103 104__END_DECLS 105 106#if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE) 107/* 108 * Darwin-specific extensions below 109 */ 110#include <mach/exception_types.h> 111#include <mach/machine.h> 112#include <mach/port.h> 113 114#include <sys/_types/_size_t.h> 115 116__BEGIN_DECLS 117 118int posix_spawnattr_getbinpref_np(const posix_spawnattr_t * __restrict, 119 size_t, cpu_type_t *__restrict, size_t *__restrict) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0); 120int posix_spawnattr_setauditsessionport_np(posix_spawnattr_t *__restrict, 121 mach_port_t) __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_2); 122int posix_spawnattr_setbinpref_np(posix_spawnattr_t * __restrict, 123 size_t, cpu_type_t *__restrict, size_t *__restrict) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0); 124int posix_spawnattr_setexceptionports_np(posix_spawnattr_t *__restrict, 125 exception_mask_t, mach_port_t, 126 exception_behavior_t, thread_state_flavor_t) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0); 127int posix_spawnattr_setspecialport_np(posix_spawnattr_t *__restrict, 128 mach_port_t, int) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0); 129int posix_spawn_file_actions_addinherit_np(posix_spawn_file_actions_t *, 130 int) __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_4_3); 131 132__END_DECLS 133 134#endif /* (!_POSIX_C_SOURCE || _DARWIN_C_SOURCE) */ 135#endif /* _SPAWN_H_ */ 136