_spawn, функции _wspawn

Каждое _spawn функции создают и выполняют новый процесс:

_spawnl, _wspawnl

_spawnv, _wspawnv

_spawnle, _wspawnle

_spawnve, _wspawnve

_spawnlp, _wspawnlp

_spawnvp, _wspawnvp

_spawnlpe, _wspawnlpe

_spawnvpe, _wspawnvpe

Буквы в конце имени функции, определяющих изменения.

  • e
    envpмассив указателей на параметры среды, передается новому процессу.

  • l
    Аргументы командной строки, передаваемые по отдельности к _spawn функция.Данный суффикс обычно используется, когда несколько параметров в новый процесс известны заранее.

  • p
    PATH переменная среды используется, чтобы найти файл для выполнения.

  • v
    argvмассив указателей на аргументы командной строки, передается _spawn функция.Данный суффикс обычно используется, когда несколько параметров в новый процесс переменны.

Заметки

_spawn функции каждое создает и выполняет новый процесс.Они автоматически изменяются аргументы характерной черты, узнающ последовательности многобайтового символов в соответствии с многобайтовой кодовой странице в настоящий момент используется._wspawn функции версии расширенных символов _spawn функции; они не обрабатывают характерные черты.в противном случае, _wspawn поведение идентично их функции _spawn аналогом.

Сопоставления подпрограммы Родов-Текста

Подпрограмма Tchar.h

Не указанные _UNICODE и _MBCS

Указанный символ _MBCS

Указанный _UNICODE

_tspawnl

_spawnl

_spawnl

_wspawnl

_tspawnle

_spawnle

_spawnle

_wspawnle

_tspawnlp

_spawnlp

_spawnlp

_wspawnlp

_tspawnlpe

_spawnlpe

_spawnlpe

_wspawnlpe

_tspawnv

_spawnv

_spawnv

_wspawnv

_tspawnve

_spawnve

_spawnve

_wspawnve

_tspawnvp

_spawnvp

_spawnvp

_wspawnvp

_tspawnvpe

_spawnvpe

_spawnvpe

_wspawnvpe

Достаточно памяти, должна быть доступна для загрузки и выполнения новый процесс.mode аргумент указывает действие, выполняемое при вызове процессом и в течение _spawn.Следующие значения mode укажите в Process.h:

  • _P_OVERLAY
    Overlays вызывающий процесс с новый процесс уничтожение вызывающий процесс (тот же эффект, что и _exec вызовы).

  • _P_WAIT
    Приостанавливает вызывающий поток до тех пор, пока выполнение не будет завершено (нового процесса в синхронном режиме _spawn).

  • _P_NOWAIT или _P_NOWAITO
    Продолжает исполнять вызывающий процесс в синхронном режиме с новым (асинхронным процессом _spawn).

  • _P_DETACH
    Вызывающий процесс продолжается выполнение; новый процесс выполняется в фоновом режиме, без доступа на консоль или клавиатуры.Вызовы _cwait для нового (асинхронного процесса завершается с ошибкой _spawn).

cmdname аргумент указывает файл, в который выполняется как новый процесс и может указать полный путь (от корневого), частично путь (от текущей рабочей папки) или просто имя файла.If cmdname не имеет расширение имени файла не будет завершен или с точкой (.), _spawn первые действуют пытаются расширение имени файла .com, а затем расширение имени файла exe, расширение имени файла bat, cmd и наконец расширение имени файла.

If cmdname имеет расширение имени файла, то используется только расширение.If cmdname с точкой _spawn поиск вызова для cmdname без расширения имени файла._spawnlp" _spawnlpe" _spawnvpи_spawnvpe поиск функций cmdname (используя те же процедуры) в каталогах, указанных PATH переменная среды.

If cmdname содержит описатель диска или все знаки косой черты (т е если это относительный путь) _spawn вызов выполняет поиск только для указанного файла; ни поиск пути не производится.

В прошлом некоторые из этих функций задают errno значение нуль в случае успеха; текущая функциональности оставлять errno нетронуто в случае успешного выполнения в соответствии с стандартом c.Если нужно смоделировать старая функциональности, параметр errno равным нулю только до вызова этих функций.

ПримечаниеПримечание

Чтобы обеспечить правильное завершение инициализации и перекрытия не используйте setjmp OR longjmp функция для ввода или оставить программу перекрытия.

Аргументы для икренного процесса

Для передачи аргументов в новый процесс, присвойте один или несколько указателей в строках символов, таких как аргументы _spawn вызов.Эти символьные строки формируют список аргументов для икренного процесса.Совмещенная длина строк, формируя список аргументов для нового процесса не должен превышать 1024 байт.Конечный нуль-символ (" \ 0 ") для каждой строки не включен в количестве, но пробелы (автоматически, вставленные в отдельный аргументам) включаются.

ПримечаниеПримечание

Внедренные пробелы в строках могут вызвать непредвиденную расширения функциональности; например, передавая _spawn string "hi there" завершится в новом процессе получения аргумента, 2 "hi" и "there".Если назначение была быть открыт нового процесса файл с именем "высокие" есть, то процесс завершился бы ошибкой.Можно избежать этого, заключать в кавычки строки: "\"hi there\"".

Примечание о безопасностиПримечание по безопасности

Не следует передавать входные данные пользователя _spawn без явно проверить его содержимое._spawn приведет к вызову CreateProcess поэтому имейте в виду, что неполные имена путей может привести к потенциальным уязвимостям.

Можно передавать указатели аргументов аргументы (в виде отдельного _spawnl" _spawnle" _spawnlpи _spawnlpe) или как массив указателей (в _spawnv" _spawnve" _spawnvpи _spawnvpe).Необходимо указывать по меньшей мере один аргумент arg0 OR argv[0], на икренному процессу.По соглашению этот аргумент имя программы по мере ее ввести в командной строке.Другое значение не вызовет ошибку.

_spawnl" _spawnle" _spawnlpи _spawnlpe вызовы обычно используются в тех случаях, когда число аргументов известно заранее.arg0 обычно указатель на аргумент cmdname.Аргументы arg1 via argn указатели на строки символов, формируя новый список аргументов.Уточняющий запрос argnдолжно быть a NULL указатель, чтобы отметить конец списка аргументов.

_spawnv" _spawnve" _spawnvpи _spawnvpe вызовы могут быть полезны при переменное число аргументов к новому процессу.Указатели к аргументам передаются в виде массива argv*.* Аргумент argv[0] обычно указатель на пути в реальном режиме или на имя программы в защищенном режиме. argv[1] до конца argv[n] указатели на строки символов формируя новый список аргументов.Аргумент argv[n +1] должны быть a NULL указатель, чтобы отметить конец списка аргументов.

Среда икренного процесса

Файлы, открытые при a _spawn вызывается остается открытым в новом процессе.в _spawnl" _spawnlp" _spawnvи _spawnvp вызовы новый процесс наследуют среду вызывающего процесса.Можно использовать _spawnle" _spawnlpe" _spawnveи _spawnvpe вызовы для изменения среды для нового процесса путем передачи списка параметров среды через envp аргумент.Аргумент envp массив указателей, каждый элемент (за исключением последнего элемента), что указывает на null-завершенной строке, указав переменную среды.Такая строка обычно имеет форму NAME=value где NAME имя переменной среды и value строковое значение, в котором эта переменная задана.(Обратите внимание, что value не заключен в двойные кавычки ("). Конечный элемент envp массив должен иметь NULL.После envp сам NULLпроцесс, икренный наследует параметры среды родительского процесса.

_spawn функции могут передавать все сведения об открытых файлах, в том числе режим преобразования в новый процесс.Эти сведения передаются в реальный режим посредством C_FILE_INFO запись в этой среде.Стартовые код обычно обрабатывает эту запись и затем удаляет его из среды.Однако если набор узлов a _spawn функция икрит процесс non-C эта запись остается в этой среде.Указывает графические символы ввести среду в строке определения для данной записи поскольку данные передаются бинарную среды в форме в реальном режиме.Он не должен иметь любой другой влияние на обычных операциях.В защищенном режиме сведения о среде передаются в форме текста и поэтому не содержат символы графики.

Необходимо явно сбросить (using fflush OR _flushallлюбой поток) или закрыть перед вызовом a _spawn функция.

Новые процессы, созданные вызовах _spawn подпрограммы не сохраняют параметры ввода.Вместо этого икренные параметры процесса ввода возвратов в значение по умолчанию.

Записи выходных данных

Если вызвать _spawn из библиотеки DLL или приложения графического интерфейса пользователя и записи выходных данных в канал, имеющих значение 2 параметра:

  • Использовать API Win32, чтобы создать канал, вызовите AllocConsoleзадайте значения дескриптора в структуре запуска и вызов CreateProcess.

  • Вызов _popen, _wpopen чтобы создать приложение, используя канал и вызовите cmd.exe /c (или command.exe /c).

Пример

// crt_spawn.c
// This program accepts a number in the range
// 1-8 from the command line. Based on the number it receives,
// it executes one of the eight different procedures that
// spawn the process named child. For some of these procedures,
// the CHILD.EXE file must be in the same directory; for
// others, it only has to be in the same path.
//

#include <stdio.h>
#include <process.h>

char *my_env[] =
{
   "THIS=environment will be",
   "PASSED=to child.exe by the",
   "_SPAWNLE=and",
   "_SPAWNLPE=and",
   "_SPAWNVE=and",
   "_SPAWNVPE=functions",
   NULL
};

int main( int argc, char *argv[] )
{
   char *args[4];

   // Set up parameters to be sent: 
   args[0] = "child";
   args[1] = "spawn??";
   args[2] = "two";
   args[3] = NULL;

   if (argc <= 2)
   {
      printf( "SYNTAX: SPAWN <1-8> <childprogram>\n" );
      exit( 1 );
   }

   switch (argv[1][0])   // Based on first letter of argument 
   {
   case '1':
      _spawnl( _P_WAIT, argv[2], argv[2], "_spawnl", "two", NULL );
      break;
   case '2':
      _spawnle( _P_WAIT, argv[2], argv[2], "_spawnle", "two", 
               NULL, my_env );
      break;
   case '3':
      _spawnlp( _P_WAIT, argv[2], argv[2], "_spawnlp", "two", NULL );
      break;
   case '4':
      _spawnlpe( _P_WAIT, argv[2], argv[2], "_spawnlpe", "two", 
                NULL, my_env );
      break;
   case '5':
      _spawnv( _P_OVERLAY, argv[2], args );
      break;
   case '6':
      _spawnve( _P_OVERLAY, argv[2], args, my_env );
      break;
   case '7':
      _spawnvp( _P_OVERLAY, argv[2], args );
      break;
   case '8':
      _spawnvpe( _P_OVERLAY, argv[2], args, my_env );
      break;
   default:
      printf( "SYNTAX: SPAWN <1-8> <childprogram>\n" );
      exit( 1 );
   }
   printf( "from SPAWN!\n" );
}
  

См. также

Ссылки

Процесс и управление среды

abort

atexit

_exec, функции _wexec

exit, _exit

_flushall

_getmbcp

_onexit, _onexit_m

_setmbcp

system, _wsystem