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.
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.
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.htmlDans 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à.
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()
.