Aracılığıyla paylaş


_spawn, _wspawn işlevleri

Her bir _spawn işlev oluşturur ve yeni bir işlem yürütür:

_spawnl, _wspawnl

_spawnv, _wspawnv

_spawnle, _wspawnle

_spawnve, _wspawnve

_spawnlp, _wspawnlp

_spawnvp, _wspawnvp

_spawnlpe, _wspawnlpe

_spawnvpe, _wspawnvpe

İşlev adının sonundaki harf çeşitleme belirler.

  • e
    envp, dizi işaretçileri için ortam ayarları, yeni işleme aktarılır.

  • l
    Komut satırı bağımsız değişkeni için ayrı ayrı geçirilen _spawn işlevi.Yeni bir işlem için parametreler önceden bilinen bu soneki genellikle kullanılır.

  • p
    PATHortam değişkeni, dosyayı yürütmek için bulmak için kullanılır.

  • v
    argv, dizi için geçirilen komut satırı bağımsız değişkeni için işaretçiler _spawn işlevi.Yeni bir işlem parametreleri bir dizi değişken olduğunda bu soneki genellikle kullanılır.

Notlar

_spawn İşlevler her oluşturmak ve yeni bir işlem yürütme.Bunlar şu anda kullanımda çok baytlı kod sayfasına göre çok baytlı karakter dizileri tanımayı çok baytlı karakter dizesi değişkenleri uygun şekilde otomatik olarak işler._wspawn İşlevlerdir geniş karakter sürümlerini _spawn işlev görür; çok baytlı karakter dizeleri işleyemez.Aksi halde, _wspawn işlevleri çok özdeş olarak davranır, _spawn karşılıkları.

Genel metin yordamı eşlemeleri

Tchar.h yordamına girildi

_UNICODE ve _mbcs tanımlı değil

Tanımlanan _mbcs

Tanımlanan _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

Yükleme ve yeni işlemi yürütmek için yeterli bellek bulunmalıdır.mode Bağımsız değişkeni belirler ve önce sırasında çağıran işlem tarafından gerçekleştirilen eylemi _spawn.Aşağıdaki değerleri için mode Process.h tanımlanır:

  • _P_OVERLAY
    Kaplamalar arama bir arama işlemi yok edip yeni bir işlem ile işlem (aynı efekt olarak _exec çağrıları).

  • _P_WAIT
    Yeni işlemin yürütülmesi tamamlanana kadar arayan bir iş parçacığı askıya alır (zaman uyumlu _spawn).

  • _P_NOWAIT veya _P_NOWAITO
    Yeni bir işlem ile aynı anda arama işlemi yürütmeye devam eder (zaman uyumsuz _spawn).

  • _P_DETACH
    Arama işlemi gerçekleştirilmeye devam eder; Yeni işlem erişimi olmayan arka planda konsol veya klavye çalıştırılır.İçin çağırdığı _cwait karşı yeni işlem başarısız (zaman uyumsuz _spawn).

cmdname Bağımsız değişkeni bir tam yolu (kök), kısmi yoldan (geçerli çalışma dizini) veya yalnızca bir dosya adı belirtin ve yeni bir işlem olarak yürütülür dosyayı belirtir.cmdname Bir dosya adı uzantısına sahip değil ya da bir nokta (.) ile bitmeyen _spawn işlevi ilk .com dosya adı uzantısı ve sonra .exe dosya adı uzantısı .bat dosya adı uzantısını ve son olarak .cmd dosya adı uzantısı çalışır.

cmdname Uzantısı kullanılır bir dosya adı uzantısı, yalnızca vardır.cmdname , Noktayla biten _spawn arar çağrısı cmdname hiçbir dosya adı uzantısına sahip._spawnlp, _spawnlpe, _spawnvp, Ve _spawnvpe arama işlevlerine cmdname (yordamları kullanarak) tarafından belirtilen dizinde PATH ortam değişkeni.

cmdname (Yani, göreli bir yol ise) sürücü belirleyici veya herhangi bir eğik çizgi içerir, _spawn arama arama yalnızca belirtilen dosya; hiçbir yol arama yapılır.

Geçmişte, bunlardan bazıları işlevleri kümesi errno ; başarı sıfıra Geçerli davranışını bırakmaktır errno c standardı tarafından belirlenen başarı durumunda untouched.Eski davranışı öykünmesine gerekiyorsa, set errno bu işlevler çağrılmadan önce sıfır.

[!NOT]

Uygun kaplama başlatma ve sonlandırma sağlamak için kullanma setjmp veya longjmp işlevini girin veya bir kaplama yordamı bırakın.

Oluşturulan işlemi için bağımsız değişkenler

Yeni işlem için bağımsız değişken geçirdiğinizde için bağımsız değişkenler olarak karakter dizeleri için bir veya daha fazla işaretçiler verin _spawn çağırın.Bu karakter dizeleri oluşturulan işlemi için bağımsız değişken listesi oluşturur.Yeni işlem için bağımsız değişken listesi oluşturma dizeleri toplam uzunluğu 1024 baytı aşmamalıdır.Her dize Sonlandırıcı boş karakter ('\0') sayıma dahil edilmez, ancak boşluk karakterleri (bağımsız değişkenleri ayırmak için otomatik olarak eklenen) dahil edilir.

[!NOT]

Dizelerdeki katıştırılmış boşluklar beklenmeyen davranışlara neden olabilir; Örneğin, geçen _spawn dize "hi there" iki baðýmsýz deðiþken alma işleminde yeni sonuçlanacak "hi" ve "there".Yeni işlem adlı bir dosyayı açmak için hedefi ise, "yüksek vardır", işlem başarısız olur.Dizeyi tırnak içine almak tarafından önleyebilirsiniz: "\"hi there\"".

Güvenlik NotuGüvenlik Notu

Kullanıcı girişi iletmeyen _spawn içeriğini açıkça denetimi olmadan._spawnÇağrı sonuçlanır CreateProcess bu nedenle nitelenmemiş adlar için olası güvenlik açıklarına neden olabilir yol göz önünde bulundurun.

Bağımsız işaretçiler olarak ayrı bağımsız değişkenler iletebilirsiniz (de _spawnl, _spawnle, _spawnlp, ve _spawnlpe) veya işaretçi bir dizi olarak (de _spawnv, _spawnve, _spawnvp, ve _spawnvpe).En az bir bağımsız değişken geçmesi gereken arg0 veya argv[0] için oluşturulan işlemi.Komut satırında yazdığınız şekilde kural gereği, bu bağımsız değişken programının adıdır.Farklı bir değer, bir hata oluşturmaz.

_spawnl, _spawnle, _spawnlp, Ve _spawnlpe çağrıları genellikle burada bağımsız değişkenleri bilinen önceden durumlarda kullanılır.arg0 Bağımsız değişken ise genellikle bir işaretçi cmdname.Bağımsız değişken arg1 ile argn yeni bağımsız değişken listesi oluşturma karakter dizeleri imleçlerdir.Aşağıdaki argn, bulunması bir NULL bağımsız değişken listesinin sonunu işaretlemek için işaretçi.

_spawnv, _spawnve, _spawnvp, Ve _spawnvpe çağrıları yeni işlem için bağımsız değişken sayıda olduğunda yararlıdır.İşaretçiler bağımsız bir dizi olarak geçirilen argv*.* Bağımsız değişken argv[0] genellikle bir yol gösteren bir işaretçi gerçek modda program adının korumalı modda mı ve argv[1] ile argvn yeni bağımsız değişken listesi oluşturma karakter dizeleri imleçlerdir.Bağımsız değişken argvn + 1] olması gereken bir NULL değişken listesinin sonunu işaretlemek için işaretçi.

Oluşturulan işlemi ortamı

Dosyaları açmak bir _spawn çağrısı yapıldığı yeni işlemde açık kalır.De _spawnl, _spawnlp, _spawnv, ve _spawnvp çağrıları, yeni işlem çağırma işlemi ortamını devralır.Kullanabileceğiniz _spawnle, _spawnlpe, _spawnve, ve _spawnvpe çağrıları için yeni bir işlem ortamı ortam ayarlarının bir listesini ileterek alter envp bağımsız değişkeni.Bağımsız değişken envp (son öğesi dışında) her öğe, bir ortam değişkeni tanımlama boş sonlandırılmış bir dizeye işaret eden bir dizi karakter işaretçileri olan.Bu tür bir dize genellikle aþaðýdaki biçime sahip NAME=value burada NAME bir ortam değişkeninin adıdır ve value bu değişkeni ayarlamak dize değeri şöyledir.(Dikkat edin value çift tırnak içine alınmamış.) Son öğesi envp dizi olması gereken NULL.Zaman envp kendisi NULL, oluşturulan işlem üst işleminin ortam ayarlarını devralır.

_spawn İşlevler yeni işlem için çeviri modu da dahil olmak üzere, açık dosyalar hakkında tüm bilgileri iletebilir.Bu bilgiler gerçek mod geçilen C_FILE_INFO ortamında girdi.Başlatma kodunu, bu girişin normalde işler ve sonra ortamından siler.Ancak, bir _spawn işlevi bir c işlemi olarak çoğaltılır, bu girişin ortamında kalır.Çalışma ortamı bilgileri gerçek kipte ikili biçimde geçirdiğinden yazdırma ortamı bu girdi için tanım dizesindeki grafik karakterleri gösterir.Normal işlemler üzerinde herhangi bir etkisi olmamalıdır.Korumalı modda bir ortam bilgileri metin biçiminde aktarılır ve bu nedenle hiçbir grafik karakterler içeriyor.

Açıkça temizlemek gerekir (kullanarak fflush veya _flushall) veya herhangi bir arama önce Close'u bir _spawn işlevi.

Yapılan çağrılar tarafından oluşturulan yeni işlemleri _spawn yordamları sinyali ayarlarını korumak değildir.Bunun yerine, oluşturulan işlemi sinyali ayarlarını varsayılan ayarlarına sıfırlar.

Çıkışı yeniden yönlendirme

Aradığınız, _spawn bir dll veya GUI uygulaması ve çıktısını bir kanala yönlendirmek istiyorsanız, iki seçeneğiniz vardır:

  • Bir kanal oluşturmak için Win32 API'sını kullanırlar sonra çağrısı AllocConsole, başlangıç yapısı ve çağrı tanıtıcısı değerleri ayarlamak CreateProcess.

  • Call _popen, _wpopen , bir kanal oluşturmak ve uygulama kullanarak çağırmak cmd.exe /c (veya command.exe /c).

Örnek

// 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" );
}
  

Ayrıca bkz.

Başvuru

İşlem ve ortam denetimi

abort

atexit

_exec, _wexec işlevleri

exit, _exit

_flushall

_getmbcp

_onexit, _onexit_m

_setmbcp

system, _wsystem