Spawn
spawn
Функция Создает и запускает дочерний процесс.
Синтаксис #include
#include
int spawnl(int mode, char *pathname, char *arg0, arg1,...,argn, NULL); int spawnle(int mode, char *pathname, char *arg0, arg1,...,argn, NULL); int spawnlp(int mode, char *pathname, char *arg0, arg1,...,argn, NULL); int spawnlpe(int mode, char *pathname, char *arg0, arg1,...,NULL, char *envp[]); int spawnv(int mode, char *pathname, char*argv[]); int spawnve(int mode, char *pathname, char *argv[], char *envp[]); int spawnvp(int mode, char *pathname, char *argv[]); int spawnvpe(int mode, char *pathname, char *argv[], char * envp[]);
Файл, содержащий process.h прототип
Описание Функции семейства spawn... создают и запускают другие программные файлы, известные под названием "дочерний процесс". Для загрузки и выполнения до- чернего процесса должно быть достаточно памяти.
Значение параметра mode влияет на то, каким обра- зом материнский процесс продолжит свои действия после вызова функции spawn... . Далее перечислены возможные значения аргумента mode:
P_WAIT Ставит родительский процесс в состояние ожидания до тех пор, пока дочерний процесс не завершится.
P_NOWAIT Продолжает работу родительского процесса одновременно с работой дочернего процес- са.
P_OVERLAY Перекрывает дочерним процессом область памяти первоначально занятую родитель- ким процессом. Работает аналогично вы- зову функции exec... .
Примечание. Значение P_NOWAIT в данной версии не поддерживается; использование его приведет к ошибке.
Аргумент pathname представляет собой имя файла дочернего процесса. Функции семейства spawn... осуществляют поиск файла с данным именем, пользу- ясь следующим стандартным алгоритмом DOS:
- Нет расширения или нет точки; осуществляется поиск по точному имени файла, если по такому имени файл не найден, добавляется .COM, и поиск производится снова, если опять не найден, то добавляет .EXE и поиск повторяется;
- Расширение имени присутствует; поиск произво- дится только по точному имени файла;
- Точка присутствует; поиск производится только по имени файла - без расширения.
- Если path не содержит имени директории, то фун- кции spawn... с суффиксом p производят поиск в текущей директории, а затем в директориях, ука- занных в переменной окружения PATH.
Суффиксы, добавляемые к имени функции spawn... (l, v, p, e) отражают некоторые особенности рабо- ты функций:
p - означает, что функция будет искать дочерний процесс в директориях, определяемых перемен- ной операционной среды системы DOS-PATH. Без задания суффикса p функция будет искать файл только в текущей рабочей директории.
l - означает, что аргументы-указатели arg0, arg1, ... argn передаются, как отдельные аргументы. Обычно, суффикс l применяется, когда количес- тво передаваемых аргументов известно заранее.
v - означает, что аргументы-указатели передаются в виде массива указателей: argv[0], ...argv[n]. Обычно суффикс v употребляется при переменном числе аргументов.
e - обозначает, что дочернему процессу может быть передан аргумент envp, что позволяет менять операционную среду дочернего процесса. Без суффикса e дочерний процесс наследует опера- ционную среду родительского процесса.
Каждая функция семейства spawn... должна иметь один из двух суффиксов l или v. Суффиксы p и e необязательны.
Например:
- функция с именем spawnl - это функция семейства spawn..., принимающая отдельные аргументы, осу- ществляющая поиск файла дочернего процесса в корневой или рабочей директории и передающей дочернему процессу операционную среду родитель- ского процесса.
- Функция spawnvpe - это функция семейства spawn..., которая принимает массив аргумен- тов-указателей, применяет параметр среды PATH для поиска файла дочернего процесса и передает ему параметр envp, позволяющий ему изменить свою операционную среду.
Функции семейства spawn... должны передавать до- чернему процессу по крайней мере один аргумент (arg0 или argv[0]). По соглашению данным аргумен- том является копия параметра pathname. (Использо- вание для данного нулевого аргумента других зна- чений не вызовет ошибку). В версиях операционной системы DOS 3.0 и выше поддерживается аргумент pathname. В более ранних версиях не может использоваться значение нулевого аргумента (arg0 или argv[0]).
При использовании суффикса l arg0 обычно адресует pathname, а остальные аргументы arg1,...,argn яв- ляется указателями на символьные строки, реально составляющие список аргументов. Обязательный ад- ресный нуль NULL завершает список аргументов.
При использовании суффикса e, список новых назна- чений операционной среды передается посредством аргумента envp. Данный аргумент представляет со- бой массив указателей, где каждый элемент указы- вает на символьную строку с нулевым окончанием в форме:
envvar = value,
где envvar - это имя переменной операционной сре- ды, а value - это строковое, значение, присваива- емое переменной envvar. Последним элементом мас- сива envp[] является NULL. Когда envp[0] равно NULL, дочерний процесс наследует назначения среды родительского процесса.
Общая длина списка arg0+arg1+...+argn (или argv[0]+argv[1]+...+argv[n]), включая пробелы, разделяющие аргументы, должна быть
#include
#include
int main(void) { int result; clrscr(); result = spawnl(P_WAIT,"tcc.exe",NULL); if(result==-1) { perror("Ошибка spawnl"); exit(1); } return 0; }
Пример 2:
#include
#include
#include
int main(void) { int result; clrscr(); result = spawnle(P_WAIT,"tcc.exe",NULL,NULL); if(result==-1) { perror("Ошибка spawnle"); exit(1); } return 0; }