Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Замечания




Прототип в process.h

Порожденные процессы

А. В. Бабушкин

тел/факс: 8 – (499) - 478-95-15, 478-08-47

 

 

Функции, запускающие порождённый процесс

1. spawn...

2. execl…

3. CreateProcessW()

 

 

spawn...

 

Назначение: Создает и запускает порожденный процесс

 

Синтаксис

 

#include <process.h>

#include <stdio.h>

 

int spawnl(int mode, char *path, char *arg0, arg1,...,argn, NULL);

int spawnle(int mode, char *path, char *arg0, arg1,..., argn, NULL, char *envp[]);

int spawnlp(int mode, char *path, char *arg0, arg1,...,argn,NULL);

int spawnlpe(int mode, char *path, char *arg0, arg1,..., argn, NULL, char *envp[]);

int spawnv(int mode, char *path, char *argv[]);

int spawnve(int mode, char *path, char *argv[], char *envp[]);

int spawnvp(int mode, char *path, char *argv[]);

int spawnvpe(int mode, char *path, char *argv[], char *envp[]);

 

 

Функции семейства spawn... создают и запускают (выполняют) другие файлы, называемые порожденными процессами (процессами-потомками). При этом должно быть достаточное количество памяти для загрузки и выполнения порожденных процессов.

Значение mode определяет действия вызывающей программы (процесса-родителя) после вызова spawn...

 

Возможные значения mode:
P_WAIT "Заморозить" выполнение процесса - родителя до тех пор, пока не завершится выполнение порожденного процесса
P_NOWAIT Продолжить выполнение процесса - родителя после запуска порожденного процесса
P_OVERLAY Порожденный процесс располагается в памяти, прежде занятой родителем. Тоже, что вызов exec...
Примечание. P_NOWAIT неприменим; его использование вырабатывает ошибку.

path является маршрутом доступа к файлу, вызываемого порожденного процесса. Функция spawn...вызывает поиск для path используя стандартный алгоритм поиска DOS:

· - Нет расширения или нет точки в конце: выполняется поиск для заданного имени файла; в случае неудачи, добавляется.EXE и поиск повторяется.

· - Расширение задано: выполняется поиск только для заданного имени.

· - Задана точка в конце: поиск выполняется только для заданного имени файла с нулевым расширением.

· - Если path не вxодит в заданный каталог, функция spawn..., которая имеет суффикс p будет искать в текущем каталоге, затем устанавливаются каталоги согласно команды PATH в DOS.

Суффиксы l, v, p и e, добавленные к spawn..., определяют семейство имен функций, которые будут выполняться с определенными возможностями.

 

p Функция будет искать файл в каталогах описанных в PATH. Без суффикса p функция будет искать только в текущем каталоге.
l Аргумент указывает arg0, arg1,..., argn вxодящий как отдельные аргументы.
v Аргумент указывает argv[0],..., argv[n] вxодящий как масив указателей.
e Аргумент envp может вxодить в порожденный процесс, позволяет вам изменять среду для порожденного процесса. Без суффикса e порожденный процесс унаследует среду родительского процесса.

 

Каждая функция из семейства spawn... должна иметь один из двуx суффиксов (или l, или v).

Суффиксы "поиск пути" и "наследственная среда" (p и e) являются необязательными.

Например:

- spawnl берет отдельные аргументы, выполняет поиск только в текущем каталоге и вxодит с родительским наследием в порожденный процесс.

- spawnvpe берет массив указателей аргументов, вносит PATH в поиск для порожденного процесса и принимает envp аргумент для изменения среды порожденного процесса.

Функции spawn... должны передавать хотя бы один аргумент в порожденный процесс (arg0 или argv[0]): этот аргумент, согласно условия, является копией path. (Использование различных значений для этого нулевого аргумента не приводит к ошибке).

Для DOS 3.x path применим для порожденного процесса, для более ранних версий порожденный процесс не может использовать входное значение 0-го аргумента (arg0 или argv[0]). Когда используется суффикс l (spawnl и т.д.), arg0 обычно указывает на path, а arg1,..,argn указывают на символьные строки, которые составляют новый список аргументов. Установка нуля, следующего за argn, расценивается как конец этого списка.

Когда используется суффикс e (spawnvpe и т.д.), вы заносите список новыx установок среды через аргумент envp. Этот аргумент является масивом символьныx указателей. Каждый элемент указывает нуль-ограничитель символьной строки формы:

envvar = value,

где envvar является именем переменной среды, а value - строковое значение в которое устанавливается envvar. envp[] заканчивается нулем. Когда envp=0, порожденный процесс наследует родительские установки среды.

Комбинированная длина arg0+arg1+...+argn (или argv[0]+argv[1]+...+argv[n]), включающая пространство символов разделяющих аргументы, должна быть < 128 байт. Нуль-ограничитель в расчет не берется.

Когда сделан вызов функции spawn..., любые открытые файлы остаются открытыми в порожденном процессе.




Поделиться с друзьями:


Дата добавления: 2015-06-29; Просмотров: 220; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.014 сек.