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]), включая пробелы,
                   разделяющие аргументы, должна быть <128 байт,
                   причем нулевые окончания не учитываются.

                   После вызова функции spawn... любые открытые ра-
                   нее файлы остаются открытыми в дочернем процессе.

Возвращаемое       При успешном завершении возвращается статус выхода
значение           из дочернего процесса (0- для нормального выхода).
                   Если дочерний процесс специально вызывал функцию
                   exit с ненулевым аргументом, его выходной статус
                   также получит ненулевое значение.

                   В случае ошибки функции spawn... возвращают -1, и
                   переменная errno получает одно из следующих зна-
                   чений:

                   E2BIG  - Список аргументов слишком длинный;
                   EINVAL - Неверный аргумент:
                   ENOENT - Маршрут или имя файла не найдены;
                   ENOEXEC - Ошибка формата EXEC:
                   ENOMEM  - Не хватает памяти.

Переносимость      Функции семейства spawn... уникальны для DOS.

Смотрите также      abort atexit _exit exit exec.., _fpreset
                    searchpath system

Пример 1:

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