Это множество форм записи отличается синтаксисом, который определяет формат списка аргументов командной строки, полученного нами в качестве параметров функции main()
• l
NULL;• e
• p
/»), для его поиска используется переменная окружения PATH;• v
В нашу задачу не входит описание всех возможностей вызовов, тем более что они обстоятельно описаны в [1, 2, 5, 6], и мы будем использовать по тексту любую, более удобную для нас форму без дополнительных объяснений.
Большинство форм функции exec()
spawn() представляет собой специфическое расширение QNX. Более того, даже для тех функций группы spawn(), которые часто называют POSIX-совместимыми [1], техническая документация QNX определяет степень совместимости примерно в таких терминах: «Функции семейства exec()
fork() для замены копии вызывающего процесса новым (это классическая UNIX-технология использования).Функции семейства spawn()
spawn()[13], который последним действием своего выполнения и посылает сообщение procnto (менеджер процессов QNX, «территориально» объединенный с микроядром системы в одном файле).Базовый вызов spawn()
#include
pid_t spawn(const char* path, int fd_count, const int fd_map[],
const struct inheritance* inherit, char* const argv[],
char* const envp[]);
где path
fd_count
fd_map;fd_map
fd_count не равен 0 (то есть может иметь значения вплоть до константы OPEN_MAX), то fd_map должен содержать список из fd_count файловых дескрипторов. Если же fd_count равен 0, то дочерний процесс наследует все родительские дескрипторы, исключая те, которые созданы с флагом PD_CLOEXEC функции fcntl();inherit
struct inheritance, содержащая как минимум: unsigned long flags
SPAWN_CHECK_SCRIPT
spawn() запускать требуемый командный интерпретатор, интерпретируя path как скрипт (интерпретатор указан в первой строке скрипта path); SPAWN_SEARCH_PATH
PATH для поиска выполняемого файла path; SPAWN_SETGROUP
pgroup. Если этот флаг не установлен, дочерний процесс будет частью текущей группы родительского процесса; SPAWN_SETND
nd (см. команду удаленного запуска on); SPAWN_SETSIGDEF
sigdefault для определения процесса множества (набора) сигналов, для которых будет установлена реакция по умолчанию. Если этот флаг не установлен, дочерний процесс наследует все сигнальные реакции родителя; SPAWN_SETSIGMASK
sigmask в качестве сигнальной маски дочернего процесса.