web-dev-qa-db-fra.com

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

J'ai besoin d'exporter plusieurs variables telles qu'elles se présentent comme suit dans la ligne de commande

export ROS_HOSTNAME=xxx

Comment utiliser setenv () en c ++ pour y parvenir?

Merci.

15
return 0

À partir de la saisie manuelle setenv():

SYNOPSIS

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

LA DESCRIPTION
La fonction setenv () doit mettre à jour ou ajouter une variable dans l'environnement du processus appelant. L'argument envname pointe vers une chaîne contenant le nom d'une variable d'environnement à être ajouté ou modifié. La variable d'environnement doit être définie sur la valeur sur laquelle envval pointe. La fonction doit échouer si envname désigne une chaîne contenant un caractère '='. Si la variable d'environnement nommée par envname existe déjà et si la valeur d'écrasement est différente de zéro, la fonction doit renvoyer succès et l'environnement doit être mis à jour. Si l'environnement la variable nommée par envname existe déjà et la valeur de réécriture est égale à zéro, la fonction doit renvoyer succès et l'environnement doit rester inchangé.

Si l'application modifie l'environnement ou les pointeurs sur lesquels elle pointe, le comportement de setenv () n'est pas défini. La fonction setenv () doit mettre à jour la liste des pointeurs vers lesquels environ points.

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

La fonction setenv () n'a pas besoin d'être réentrant. Une fonction qui n'est pas obligée d'être réentrant ne doit pas nécessairement être thread-safe.

VALEUR DE RETOUR
En cas de succès, zéro doit être renvoyé. Sinon, la valeur -1 doit être renvoyée, errno contient le code d'erreur et l'environnement doit rester inchangé.

Alors tu devrais appeler 

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

ou 

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

pour votre cas. Cela dépend, si vous voulez écraser une définition éventuellement existante.

REMARQUE:

Vous ne pouvez pas utiliser setenv() pour exporter des variables de votre processus vers le processus appelant (shell)!.

22
πάντα ῥεῖ

Voici la signature de la fonction setenv 

#include <stdlib.h>

int setenv (const char * nom env, const char * envval, int écraser);

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

Dans votre cas, vous l'appelez comme ceci:

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

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

0
elmadj

Fait comme ça:

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

Notez aussi son synopsis: 

#include <stdlib.h>

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

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

0
Shumail Mohyuddin