Как использовать setenv() для экспорта переменной в С++?

Мне нужно экспортировать несколько переменных, чтобы они выглядели следующим образом в командной строке

export ROS_HOSTNAME=xxx

Как использовать setenv() в С++ для достижения этого?

Спасибо.

Ответ 1

В ручном вводе setenv():

СИНТАКСИС

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

ОПИСАНИЕ
       Функция setenv() должна обновлять или добавлять переменную в среде вызывающего процесса. Аргумент envname указывает на строку, содержащую имя переменной среды, для        быть добавленным или измененным. Переменная среды должна быть установлена ​​в значение, на которое указывают точки envval. Функция будет терпеть неудачу, если envname указывает на строку, содержащую символ '='. Если        переменная среды, названная envname, уже существует, а значение перезаписи не равно нулю, функция возвращает успех, и среда должна обновляться. Если окружающая среда        переменная с именем envname уже существует, а значение переписывания равно нулю, функция должна возвращать успех, и среда остается неизменной.

Если приложение изменяет окружение или указатели, на которые оно указывает, поведение setenv() равно undefined. Функция setenv() должна обновлять список указателей, к которым применяется среда        точек.

Строки, описываемые envname и envval, копируются этой функцией.

Функция setenv() не должна быть реентерабельной. Функция, не требующая реентерабера, не должна быть потокобезопасной.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
       После успешного завершения возвращается нуль. В противном случае возвращается -1, errno устанавливается для указания ошибки, и среда не изменяется.

Итак, вы должны позвонить

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

или

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

для вашего дела. Зависит, если вы хотите перезаписать возможно существующее определение.

Примечание:

Вы не можете использовать setenv() для экспорта переменных из вашего процесса в вызывающий процесс (оболочка)! Детские процессы, созданные с помощью fork, наследуют текущие определения среды процессов, а также ваши изменения и дополнения.

Ответ 2

Здесь сигнатура для функции setenv

#include <stdlib.h>

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

Ссылка: http://pubs.opengroup.org/onlinepubs/009695399/functions/setenv.html

В вашем случае вы вызываете это следующим образом:

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

последний логический аргумент указывает, хотите ли вы перезаписать значение переменных среды, если оно уже существует.

Ответ 3

Сделайте это:

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

Обратите внимание на это также:

#include <stdlib.h>

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

Подробнее о setenv() см. эту ссылку.