Мне нужно экспортировать несколько переменных, чтобы они выглядели следующим образом в командной строке
export ROS_HOSTNAME=xxx
Как мне использовать setenv() в С++ для достижения этого?
Спасибо.
Мне нужно экспортировать несколько переменных, чтобы они выглядели следующим образом в командной строке
export ROS_HOSTNAME=xxx
Как мне использовать setenv() в С++ для достижения этого?
Спасибо.
Из setenv()
ручной записи:
ОБЗОР
#include <stdlib.h> int setenv(const char *envname, const char *envval, int overwrite);
ОПИСАНИЕ
Функция setenv() должна обновлять или добавлять переменную в среде вызывающего процесса. Аргумент envname указывает на строку, содержащую имя переменной среды, которую необходимо добавить или изменить. Переменной среды должно быть присвоено значение, на которое указывает envval. Функция завершится ошибкой, если envname указывает на строку, содержащую символ '='. Если переменная среды, названная envname, уже существует и значение перезаписи не равно нулю, функция должна вернуть успех, и среда должна быть обновлена. Если переменная среды с именем envname уже существует, а значение перезаписи равно нулю, функция должна вернуть успех, а среда останется неизменной.Если приложение изменяет окружение или указатели, на которые оно указывает, поведение setenv() не определено. Функция setenv() должна обновить список указателей, на которые указывает окружение.
Строки, описанные envname и envval, копируются этой функцией.
Функция setenv() не обязательно должна быть реентерабельной. Функция, не требующая повторного входа, не обязана быть потокобезопасной.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
После успешного завершения возвращается ноль. В противном случае должно быть возвращено -1, errno установлено для указания ошибки, а среда не должна изменяться.
Так что вы должны позвонить
setenv("ROS_HOSTNAME","xxx",1); // does overwrite
or
setenv("ROS_HOSTNAME","xxx",0); // does not overwrite
для вашего случая. Зависит от того, хотите ли вы перезаписать возможно существующее определение.
ПРИМЕЧАНИЕ:
Вы не можете использовать setenv()
для экспорта переменных из вашего процесса в вызывающий процесс (оболочку)! Дочерние процессы, созданные с помощью fork, унаследуют текущие определения среды процессов, а также ваши изменения и дополнения.
Здесь подпись для функции setenv
#include <stdlib.h>
int setenv(const char *envname, const char *envval, int перезапись);
Ссылка: http://pubs.opengroup.org/onlinepubs/009695399/functions/setenv.html
В вашем случае вы называете это так:
setenv("ROS_HOSTNAME", "xxx", true);
последний логический аргумент указывает, хотите ли вы перезаписать значение переменных среды, если оно уже существует.
Сделайте так:
setenv("ROS_HOSTNAME", "xxx", true);
Обратите внимание и на синопсис:
#include <stdlib.h>
int setenv(const char *envname, const char *envval, int overwrite);
Подробнее о setenv()
см. эту ссылку. .
setenv
, все в порядке. Если вам нужно, чтобы они были видны в вашей оболочке после запуска программы, скажите об этом; есть (косвенные) способы сделать это, но я не собираюсь отвечать на этот вопрос, пока вы его не зададите. - person Keith Thompson   schedule 29.07.2013setenv()
всегда экспортируйтеenviron
/envp
, если разветвленному дочернему элементу не передается настроенныйenvp
, т. е.execle()
. - person   schedule 03.04.2016