Описание функций Си

       

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; }


Содержание раздела