планирования его родителя.
Синопсис
#include <spawn.h>
int posix_spawn( pid_t *restrict pid, const char *restrict path,
const posix_spawn_file_actions_t *file_actions,
const posix_spawnattr_t *restrict attrp,
char *const argv[restrict],
char *const envp[restrict]);
int posix_spawnp(pid_t *restrict pid, const char *restrict file,
const posix_spawn_file_actions_t *file_actions,
const posix_spawnattr_t *restrict attrp,
char *const argv[restrict],
char *const envp[restrict]);
Различие между этими двумя функциями состоит в том, что функции posix_spawn () передается параметр path, а функции posix_spawnp () — параметр file. Параметр path в функции posix_spawn() принимает полное или относительное составное имя выполняемого файла, а параметр file в функции posix_spawnp () — только имя выполняемой программы. Если этот параметр содержит символ «косая черта», то содержимое параметра file используется в качестве составного путевого имени. В противном случае путь к выполняемому файлу определяется с помощью переменной среды PATH .
Параметр file_actions представляет собой указатель на структуру posix_spawn_file_actions_t:
struct posix_spawn_file_actions_t {
int _allocated;
int _used;
struct _spawn_action *actions;
int _pad[16] ;
} ;
Структура posix_spawn_file_actions_t содержит информацию о действиях, выполняемых в новом процессе над дескрипторами файлов. Параметр file_actions используется для преобразования родительского набора дескрипторов открытых файлов в набор дескрипторов файлов для порожденного сыновнего процесса. Эта структура может содержать ряд файловых операций, предназначенных для выполнения в последовательности, в которой они были добавлены в объект действий над файлами. Эти файловые операции выполняются над дескрипторами открытых файлов родительского процесса и позволяют копировать, добавлять, удалять или закрывать дескрипторы заданных файлов от имени сыновнего процесса даже до его создания. Если параметр file_actions содержит нулевой указатель, то дескрипторы файлов, открытые родительским процессом, останутся открытыми для его потомка без каких-либо модификаций. Функции, используемые для добавления действий над файлами в объект типа posix_spawn_file_actions, перечислены в табл. 3.4.
Таблица З.4. Функции, используемые для добавления действий над файлами в объект типа posix_spawn_file_actions
int posix_spawn_file_actions_addclоse (posix_spawn_file_actions_t *file_actions, int fildes);
Добавляет действие close() в объект действий над файлами, заданный параметром file_actions. В результате при порождении нового процесса с помощью этого объекта будет закрыт файловый дескриптор fildes
int posix_spawn_file_actions_addopen (posix_spawn_file_actions_t *file_actions, int fildes,
const char *restrict path, int oflag, mode_t mode);
Добавляет действие open () в объект действий над файлами, заданный параметром file_actions. В результате при порождении нового процесса с помощью этого объекта будет открыт файл, заданный параметром path, с использованием дескриптора fildes
int posix_spawn_file_actions_adddup2 (posix_spawn_file_actions_t *file_actions, int fildes, int new fildes);
Добавляет действие dup2 () в объект действий над файлами, заданный параметром file_actions. В результате при порождении нового процесса с помощью этого объекта будет создан дубликат файлового дескриптора fildes с использованием файлового дескриптора newfildes
int posix_spawn_file_actions_destroy(posix_spawn_file_actions_t *file_actions);
Разрушает объект, заданный параметром file_actions, что приводит к деинициализации этого объекта. Затем его можно инициализировать повторно с помощью функции posix_spawn_file_actions_init ()
int posix_spawn_file_actions_init (posix_spawn_file_actions_t *file_actions);
Инициализирует объект, заданный параметром file_actions. После инициализации этот объект не будет содержать действий, предназначенных для выполнения над файлами
Параметр attrp указывает на структуру posix_ spawnattr_t:
struct posix_spawnattr_t {
short int _flags;
pid_t _pgrp;
sigset__t _sd;
sigset_t _ss;
struct sched_param _sp;
int _policy;
int _pad[16] ;
};
Эта структура содержит информацию о стратегии планирования, группе процессов, сигналах и флагах для нового процесса. Ниже следует описание отдельных атрибутов этой структуры.
_flags Используется для индикации того, какие атрибуты процесса должны быть модифицированы в порожденном процессе.
Эти атрибуты организованы поразрядно по принципу включающего ИЛИ:
POSIX_SPAWN_RESETIDS
POSIX_SPAWN_SETPGROUP
POSIX_SPAWN_SETSIGDEF
POSIX_SPAWN_SETSIGMASK
POSIX_SPAWN_SETSCHEDPARAM
POSIX_SPAWN_SETSCHEDULER
_pgrp Идентификатор группы процессов, подлежащих объединению с новым
процессом.
_sd Представляет множество сигналов, подлежащих обработке по умолчанию новым процессом.
_ss Представляет маску сигналов, подлежащую использованию новым процессом.
_sp Представляет параметр планирования, подлежащий назначению новому процессу.
_policy Представляет стратегию планирования, предназначенную для нового процесса.
Функции, используемые для установки и считывания отдельных атрибутов, содержащихся в структуре posix_spawnattr_t, перечислены в табл. 3.5.
Таблица 3.5. Функции, используемые для установки и считывания отдельных атрибутов структуры