2013-07-29 3 views
14

ich mehrere Variablen wie exportieren müssen, dass sie die folgenden in der Befehlszeile aussehenWie benutzt man setenv() um eine Variable in C++ zu exportieren?

export ROS_HOSTNAME=xxx 

Wie kann ich setenv() in C++ verwenden, um das zu erreichen?

Danke.

+0

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! –

+1

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. –

+0

"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

Antwort

21

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.

0

Hier wird die Signatur für die Funktion setenv

#include <stdlib.h> 

int setenv (const char * envname, const char * envval, int überschreiben);

-Link: http://pubs.opengroup.org/onlinepubs/009695399/functions/setenv.html

In Ihrem Fall, dass Sie es so nennen:

setenv("ROS_HOSTNAME", "xxx", true); 

das letzte boolean Argument gibt, wenn Sie den Wert der Umgebungsvariablen überschrieben werden sollen, wenn sie bereits vorhanden ist.

0

gefällt das:

setenv("ROS_HOSTNAME", "xxx", true); 

Hinweis es Synopse auch ist:

#include <stdlib.h> 

int setenv(const char *envname, const char *envval, int overwrite); 

this link Siehe für weitere Details über setenv().

Verwandte Themen