Comment utiliser setenv() pour exporter une variable en c++?

j'ai besoin d'exporter plusieurs variables, telles qu'elles ressemblent à ce qui suit dans la ligne de commande

export ROS_HOSTNAME=xxx

comment utiliser setenv () en c++ pour y arriver?

Merci.

14
demandé sur return 0 2013-07-29 20:37:04

3 réponses

setenv() saisie manuelle:

SYNOPSIS

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

DESCRIPTION

La fonction setenv () doit mettre à jour ou ajouter une variable dans l'environnement du processus d'appel. L'argument envname renvoie à une chaîne contenant le nom d'une variable d'environnement à être ajoutée ou modifiée. La variable d'environnement doit être réglée à la valeur à laquelle les points envval. La fonction est fail si envname pointe vers une chaîne qui contient un caractère'='. Si la variable d'environnement nommée par envname existe déjà et la valeur de overwrite est non nulle, la fonction doit retourner succès et l'environnement doit être mis à jour. Si l'environnement variable named by envname existe déjà et la valeur de overwrite est zéro, la fonction doit retourner le succès et l'environnement doit rester inchangé.

si la demande modifie l'environnement ou les pointeurs vers lequel il pointe, le comportement de setenv() n'est pas défini. La fonction setenv() met à jour la liste des pointeurs vers lesquels environ point.

les chaînes décrites par envname et envval sont copiées par cette fonction.

la fonction setenv() n'a pas besoin d'être reentrante. Une fonction qui n'est pas nécessaire d'être réentrant n'est pas nécessaire d'être thread-safe.

VALEUR DE RETOUR

Lors de la réussite d' l'achèvement, zéro doit être retourné. Sinon, -1 est renvoyé, errno pour indiquer l'erreur, et l'environnement doivent être inchangé.

de Sorte que vous devez appeler

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

ou

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

pour votre cas. Dépend, si vous souhaitez remplacer un existant éventuellement définition.

NOTE:

Vous ne pouvez pas utiliser setenv() pour exporter des variables de votre processus vers le processus appelant (shell)! Les processus enfants créé avec fork, héritera des définitions actuelles de l'environnement des processus, ainsi que de vos modifications et ajouts.

21
répondu πάντα ῥεῖ 2016-08-05 10:18:14

Voici la signature de la fonction setenv

#include <stdlib.h>

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

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

Dans votre cas vous l'appeler comme ceci:

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

le dernier argument booléen indique si vous voulez écraser la valeur des variables d'environnement si elle existe déjà.

0
répondu elmadj 2013-07-29 16:43:51

Faire comme ceci:

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

Remarque: il est résumé ainsi:

#include <stdlib.h>

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

Voir ce lien pour plus de détails sur setenv().

0
répondu Shumail Mohyuddin 2013-07-29 16:51:36