Hi,
Bei spawn gibt es AFAIK schon mal zumindest diese Möglichkeiten. [...]
Lauter ähnliche Funktionen aufzuführen, ohne den Unterschied zu erklären, halte ich für wenig sinnvoll. Daher mal eine Erklärung (gilt analog zu exec*(), die Suffixe sind dieselben):
* Präfix:
(keines) Akzeptiert (char *) als Parameter und damit Strings in
der aktuellen 8bit-Kodierung des Systems
_w Akzeptiert (wchar_t *) als Parameter und damit Strings
in UTF-16/UCS-2 bzw. dem gewurschtel, was der C-Standard
traurigerweise mit wchar_t angestellt hat.
* Suffix:
- Parameterübergabe:
l Übergib die Argumente als variable Parameterzahl, nach
dem letzten Argument folgt NULL als weiterer Parameter, um
die Liste abzuschließen. »l« steht für »list«
v Übergib die Argumente als Array, das letzte Argument im
Array wird von NULL gefolgt, um das Ende zu markieren.
»v« steht für »vector«.
Beachte: Das "nullte" Argument muss trotzdem immer noch der
Programmname sein, auch wenn man den irgendwie schon einmal vorher
übergeben hat (als Parameter unmittelbar vor der Argumentliste).
- Umgebungsvariablen:
(nichts) Vererbe die Umgebungsvariablen des eigenen Prozesses.
e Übergib eigene Umgebungsvariablen als Array von
Strings, ein NULL kennzeichnet das Ende des Arrays.
»e« steht für »environment«. Die Strings haben den
Inhalt "VARIABLE=wert", Format ist identisch zum
globalen environ-Array bzw. zum optional dritten
Parameter der main()-Funktion.
- Suchpfad
(nichts) Erwarte für den Pfad-Parameter einen relativen oder
absoluten Pfad.
p Wenn der Pfad-Parameter kein expliziter Pfad ist,
d.h. keinen Pfadtrenner (/ unter POSIX, \ unter
Windows) enthält, dann suche im Suchpfad danach, d.h.
in der Umgebungsvariable PATH oder in deren Default-
wert, sofern die nicht vorhanden ist.
Beispiele für letzten Punkt:
spawnlp(_P_WAIT, "notepad", "notepad", "C:\\test.txt", NULL);
-> funktioniert, findet notepad
spawnl(_P_WAIT, "notepad", "notepad", "C:\\test.txt", NULL);
-> funktioniert nicht, da eine Datei "notepad" im aktuellen
Verzeichnis nicht existiert
~~~c
spawnlp(_P_WAIT, "C:\Windows\notepad.exe", "notepad", "C:\test.txt", NULL);
spawnl(_P_WAIT, "C:\Windows\notepad.exe", "notepad", "C:\test.txt", NULL);
-> kein Unterschied
Beispiel für die v-Funktionen:
~~~c
char *args[] = {
"notepad",
"C:\\test.txt",
NULL
};
spawnv(_P_WAIT, "C:\\Windows\\notepad.exe", args);
Beispiele für die e-Funktionen:
char *args[] = {
"notepad",
"C:\\test.txt",
NULL
};
char *env[] = {
"FOO=bar",
"BAZ=blub",
NULL
};
spawnve(_P_WAIT, "C:\\Windows\\notepad.exe", args, env);
Viele Grüße,
Christian