CodeNet / Языки программирования / C / C++ / Linux/Unix / Справочник С/C++ для UNIX - Список функций
CodeNet / Языки программирования / C / C++ / Руководства и справочные материалы по C/C++ / Справочники по функциям / Справочник С/C++ для UNIX - Список функций
CodeNet / Языки программирования / C / C++ / Руководства и справочные материалы по C/C++ / Справочники по функциям / Справочник С/C++ для UNIX - Список функций
spawnl-spawnvpe
SPAWNL-SPAWNVPE #include <stdio.h> #include <process.h> int spawnl(modeflag,pathname,arg0,arg1...,argn,NULL); int spawnle(modeflag,pathname,arg0,arg1...,argn,NULL,envp); int spawnlp(modeflag,pathname,arg0,arg1...,argn,NULL); int spawnlpe(modeflag,pathname,arg0,arg1...,argn,NULL,envp); int spawnv(modeflag,pathname,argv); int spawnve(modeflag,pathname,argv,envp); int spawnvp(modeflag,pathname,argv); int spawnvpe(modeflag,pathname,argv,envp); int modeflag; режим выполнения parent-процесса char *pathname; path-имя выполняемого файла char *arg0,*arg1...,*argn; список указателей на аргументы char *argv[]; массив указателей на аргументы char *envp[]; массив указателей на установлен- ное окружение Описание. Функции spawn создают и выполняют новый child-процесс. Для загрузки и выполнения child-процесса должно быть доступно доста- точно памяти. Аргумент modeflag определяет действия, выбираемые parent-процессом перед и на протяжении spawn. Следующие значения modeflag объявлены в <process.h> Значение Его смысл P_WAIT Приостанавливает parent-процесс, пока не завершится child-процесс. P_NOWAIT Продолжает выполнение parent-процесса, параллельного с child-процессом. P_OVERLAY Parent-процесс перекрывается с child- процессом; parent-процесс уничтожается (то же действие, что и при вызовах exec) Могут использоваться только значения modeflag, такие как P_WAIT и P_OVERLAY. Значение P_NOWAIT сохраняется для возможной будущей реализации. Если используется P_NOWAIT, возвращается зна- чение ошибки. Аргумент pathname определяет файл, выполняемый как child-процесс. Pathname может определять полный path (из корня), часть path (из текущего рабочего директория), или просто имя фай- ла. Если pathname не имеет расширения для имени файла или если оно не заканчивается точкой (.), тогда функция spawn устанавлива- ет расширение .EXE. Если pathname имеет расширение, то использу- ется только это расширение. Если pathname заканчивается точкой, spawn осуществляет поиск pathname без расширения. Процедуры execlp, execlpe, execvpe осуществляют поиск для pathname (исполь- зуя те же процедуры) в директориях, определенных переменной окру- жения PATH. Аргументы для нового процесса передаются как аргументы в вызове spawn, задавая один или более указателей на символьные строки. Эти символьные строки образуют список аргументов для child-процесса. Общая длина строк, образующих список аргументов для нового процесса, не может превышать 128 байтов. Нулевой сим- вол окончания '\0'для каждой строки в эту длину не засчитывается, а символы пробела (автоматически вставляемые для аргументов)-зас- читываются. Указатели аргументов могут передаваться как отдельные аргу- менты (в execl, execle, execlp, execlpe) или как массив указате- лей (в execv, execve, execvp, execvpe). По крайней мере один ар- гумент - arg0 или argv[0] - может передаваться к child-процессу. По условию этот аргумент является копией аргумента pathname. (Другое значение ошибки не вырабатывается). В версиях MS DOS, ранних от 3.0, передаваемое значение arg0 или argv[0] не доступно для использования в child-процессе. Однако, для версий MS DOS 3.0 и старше pathname доступно через arg0 или argv[0]. Вызовы execl, execle, execlp, execlpe обычно используются тогда, когда количество аргументов известно заранее. Аргумент arg0 обычно является указателем на pathname. Аргументы от arg1 до argn являются указателями на символьные строки, образующие новый список аргументов. NULL-указатель, идущий за аргументом argn, оп- ределяет конец списка аргументов. Вызовы execv, execve, execvp, execvpe используются, когда число аргументов для нового процесса является переменным. Указа- тели на аргументы пересылаются как массив argv. Аргумент argv[0] обычно является указателем на pathname. Аргументы от argv[1] до argv[n] являются указателями на символьные строки, образующие но- вый список аргументов. Аргумент argv[n+1] может быть NULL-указа- телем для определения конца списка аргументов. Файлы, открытые при вызове spawn, остаются открытыми в но- вом процессе. В вызовах execl, execlp, execv, execvp, child-про- цесс наследует окружение parent-процесса. Вызовы execle, execlpe, execve, execvpe позволяют пользователю изменять окружение для child-процесса, передавая список установленного окружения через аргумент envp. Аргумент envp является массивом символьных указателей, каж- дый элемент которого (исключая последний элемент) указывает на строку, заканчивающуюся нулем и определяющую переменную окруже- ния. Обычно эта строка имеет форму: NAME = value, где NAME - имя переменной окружения, value - значение стро- ки, в которой устанавливается эта переменная. (Заметим, что value не заключается в кавычки "..."). Последним элементом массива envp должен быть NULL. Child-процесс наследует установленное окружение parent-про- цесса, когда envp является NULL. Возвращаемое значение. Возвращаемое значение является статусом выхода из child-процесса. Статус выхода равен 0, если процесс нормально за- вершен. Статус выхода устанавливается в ненулевое значение, если child-процесс особым образом вызывает процедуру exit вместе с не- нулевым аргументом. Если статус не установлен, то положительный статус выхода указывает на непредвиденный выход из программы пос- редством abort или прерывания. Возвращаемое значение -1 свидетельствует об ошибке (child-процесс не стартовал), и errno устанавливается в одно из следующих значений: ЗНАЧЕНИЕ ЕГО СМЫСЛ E2BIG Список аргументов превышает 128 байт или простраство, требуемое для информации окружения, превышает 32К. EINVAL Аргумент modeflag неверный. ENOENT Файл или path-имя не найдено. ENOEXEC Определенный файл не является выполимым или имеет неверный формат. ENOMEN Достаточная память не доступна для выполнения child-процесса. Замечание! Вызовы spawn не сохраняют режим преобразования для открытых файлов. Если child-процесс использует файлы, унасле- дованные от parent-процесса, тогда процедура setmode применяется для установки требуемого режима преобразования для этих файлов. В child-процессе, созданном вызовами процедур spawn, сиг- нальные установки не сохраняются. В child-процессе они переуста- навливаются по умолчанию. Cм. также abort, execl, execle, execlp, execlpe, execv, execve, execvp, execvpe, exit, _exit, onexit, system. Пример. #include <stdio.h> #include <process.h> extern char **environ; char *args[4]; int result; args[0]="child"; args[1]="one"; args[2]="two"; args[3]=NULL; . . . /* все следующие операторы позволяют порождать процесс, названный "child.exe", и передавать ему три аргумента. Первые три аргумента приостанавливают parent-процесс, а последние три - свя- зывают parent-процесс с child */. result=spawnl(P_WAIT,"child.exe","child","one","two", NULL); result=spawnle(P_WAIT,"child.exe","child","one", "two", NULL, environ); result=spawnlp(P_WAIT, "child.exe","child","one", "two", NULL); result=spawnv(P_OVERLAY, "child.exe", args); result=spawnve(P_OVERLAY, "child.exe", args, environ); result=spawnvp(P_OVERLAY, "child.exe", args);