Vom setenv()
manuellen Eingabe:
SYNTAX
#include <stdlib.h>
int setenv(const char *envname, const char *envval, int overwrite);
BESCHREIBUNG
Die Funktion setenv() wird eine Variable in der Umgebung des anrufenden Prozesses aktualisieren oder ergänzen. Das Argument envname zeigt auf eine Zeichenfolge, die den Namen einer Umgebungsvariablen zu hinzugefügt oder geändert enthält. Die Umgebungsvariable soll auf den Wert gesetzt werden, auf den envval zeigt. Die Funktion soll fehlschlagen, wenn envname auf eine Zeichenfolge zeigt, die ein '=' - Zeichen enthält. Wenn die von envname angegebene Umgebungsvariable bereits existiert und der Wert von overwrite ungleich Null ist, muss die Funktion erfolgreich sein und die Umgebung muss aktualisiert werden. Wenn die Umgebungsvariable Variable, die von envname benannt wird, bereits vorhanden ist und der Wert von overwrite null ist, soll die Funktion Erfolg liefern und die Umgebung soll unverändert bleiben.
Wenn die Anwendung die Umgebung oder die Zeiger, auf die sie verweist, ändert, ist das Verhalten von setenv() nicht definiert. Die Funktion setenv() muss die Liste der Zeiger aktualisieren, auf die environ zeigt.
Die von envname und envval beschriebenen Strings werden von dieser Funktion kopiert.
Die Funktion setenv() muss nicht reentrant sein. Eine Funktion, die nicht reentrant sein muss, muss nicht threadsicher sein.
UCKGABEWERT
Nach erfolgreichem Abschluss Null wird zurückgegeben werden. Andernfalls wird -1 zurückgegeben, errno wird gesetzt, um den Fehler anzuzeigen, und die Umgebung soll unverändert bleiben.
So sollten Sie
setenv("ROS_HOSTNAME","xxx",1); // does overwrite
rufen oder
setenv("ROS_HOSTNAME","xxx",0); // does not overwrite
für Ihren Fall. Hängt davon ab, ob Sie eine eventuell vorhandene Definition überschreiben möchten.
HINWEIS:
Sie nicht setenv()
verwenden können Variablen aus Ihrem Prozess zu dem anrufenden Prozess (Shell) zu exportieren! Untergeordnete Prozesse, die mit fork erstellt wurden, erben die aktuellen Prozessumgebungsdefinitionen, also auch Ihre Änderungen und Ergänzungen.
Aus welchem Grund haben Sie das Tag [tag: command-line] im Zusammenhang mit Ihrer Frage erwähnt? Sie müssen __exportieren_ wo? Erarbeiten Sie dies bitte! –
In welchem Kontext müssen diese Umgebungsvariablen sichtbar sein? Wenn sie nur innerhalb des Programms, das 'setenv' aufruft, sichtbar sein müssen, ist alles in Ordnung. Wenn Sie sie * nach dem Ausführen des Programms * in Ihrer Shell * sehen müssen, sagen Sie es bitte; es gibt (indirekte) Möglichkeiten, das zu tun, aber ich werde diese Frage nicht beantworten, wenn Sie es nicht fragen. –
"Exportieren" ist eine * Shell-Funktion *. 'setenv()' exportieren Sie immer 'environ' /' envp', es sei denn, das gabelförmige Kind wird an ein benutzerdefiniertes 'envp' übergeben, d. H.' Execle() '. – Barry