Мне нужно экспортировать несколько переменных, чтобы они выглядели следующим образом в командной строке
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() равно undefined. Функция setenv() должна обновлять список указателей, к которым применяется среда точек.
Строки, описываемые envname и envval, копируются этой функцией.
Функция setenv() не должна быть реентерабельной. Функция, не требующая реентерабера, не должна быть потокобезопасной.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
После успешного завершения возвращается нуль. В противном случае возвращается -1, errno устанавливается для указания ошибки, и среда не изменяется.
Итак, вы должны позвонить
setenv("ROS_HOSTNAME","xxx",1); // does overwrite
или
setenv("ROS_HOSTNAME","xxx",0); // does not overwrite
для вашего дела. Зависит, если вы хотите перезаписать возможно существующее определение.
Примечание:
Вы не можете использовать setenv()
для экспорта переменных из вашего процесса в вызывающий процесс (оболочка)!
Детские процессы, созданные с помощью fork, наследуют текущие определения среды процессов, а также ваши изменения и дополнения.
Здесь сигнатура для функции 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);
последний логический аргумент указывает, хотите ли вы перезаписать значение переменных среды, если оно уже существует.
Сделайте это:
setenv("ROS_HOSTNAME", "xxx", true);
Обратите внимание на это также:
#include <stdlib.h>
int setenv(const char *envname, const char *envval, int overwrite);
Подробнее о setenv()
см. эту ссылку.