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

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

export ROS_HOSTNAME=xxx

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

Благодарю.

15

Решение

От setenv() ручной ввод:

СИНТАКСИС

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

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

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

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

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

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

Так что вы должны позвонить

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

или же

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

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

НОТА:

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

21

Другие решения

Здесь подпись для функции 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);

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

0

Делай так:

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

Обратите внимание, что это также краткий обзор:

#include <stdlib.h>

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

Увидеть эта ссылка для более подробной информации о setenv(),

0
По вопросам рекламы [email protected]