Различие между этими двумя функциями состоит в том, что функции 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 Представляет стратегию планирования, предназначенную для нового процесса.

Перейти на страницу:

Похожие книги