it-swarm.com.de

Wie setenv () verwenden, um eine Variable in C++ zu exportieren?

Ich muss mehrere Variablen exportieren, sodass sie in der Befehlszeile wie folgt aussehen

export ROS_HOSTNAME=xxx

Wie verwende ich setenv () in c ++, um das zu erreichen?

Vielen Dank.

15
return 0

Aus dem setenv()-manuellen Eintrag:

ÜBERSICHT

#include <stdlib.h>  
int setenv(const char *envname, const char *envval, int overwrite);

BESCHREIBUNG
Die Funktion setenv () muss eine Variable in der Umgebung des aufrufenden Prozesses aktualisieren oder hinzufügen. Das Argument envname verweist auf eine Zeichenfolge, die den Namen einer Umgebungsvariablen auf .__ enthält. hinzugefügt oder geändert werden. Die Umgebungsvariable muss auf den Wert gesetzt werden, auf den die Umgebungsvariable zeigt. Die Funktion schlägt fehl, wenn envname auf eine Zeichenfolge verweist, die ein '=' Zeichen enthält. Ob Die von envname benannte Umgebungsvariable ist bereits vorhanden und der Wert für das Überschreiben ist ungleich Null. Die Funktion gibt den Erfolg zurück und die Umgebung soll aktualisiert werden. Wenn die Umgebung Die von envname benannte Variable ist bereits vorhanden und der Wert von overwrite ist null. Die Funktion soll den Erfolg zurückgeben und die Umgebung bleibt unverändert.

Wenn die Anwendung umgebung oder die Zeiger ändert, auf die sie verweist, ist das Verhalten von setenv () undefiniert. Die Funktion setenv () aktualisiert die Liste der Zeiger, auf die die Umgebung Punkte.

Die von envname und envval beschriebenen Zeichenfolgen werden von dieser Funktion kopiert.

Die Funktion setenv () muss nicht wiedereintrittsfähig sein. Eine Funktion, die nicht wiedereintrittsfähig sein muss, muss nicht Thread-sicher sein.

RÜCKGABEWERT
Bei erfolgreichem Abschluss wird Null zurückgegeben. Andernfalls wird -1 zurückgegeben, errno gesetzt, um den Fehler anzuzeigen, und die Umgebung bleibt unverändert.

Also solltest du anrufen 

setenv("ROS_HOSTNAME","xxx",1); // does overwrite

oder 

setenv("ROS_HOSTNAME","xxx",0); // does not overwrite

für deinen Fall Hängt davon ab, ob Sie eine eventuell vorhandene Definition überschreiben wollen.

HINWEIS:

Sie können setenv() nicht verwenden, um Variablen aus Ihrem Prozess in den aufrufenden Prozess (Shell) zu exportieren.!. Mit untergeordnete Prozesse, die mit Fork erstellt wurden, erben die Umgebungsdefinitionen der aktuellen Prozesse und somit auch Ihre Änderungen und Ergänzungen.

22

Hier die Signatur für die Setenv-Funktion 

#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 nennen Sie es so:

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

das letzte boolesche Argument gibt an, ob Sie den Wert der Umgebungsvariablen überschreiben möchten, wenn er bereits vorhanden ist. 

0
elmadj

Do so:

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

Beachten Sie auch die Zusammenfassung: 

#include <stdlib.h>

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

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

0