Как использовать setenv() для экспорта переменной в C++?
Мне нужно экспортировать несколько переменных, чтобы они выглядели следующим образом в командной строке
export ROS_HOSTNAME=xxx
Как использовать setenv () в c++ для достижения этого?
спасибо.
3 ответов
С setenv()
автоматическая запись:
справка
#include <stdlib.h> int setenv(const char *envname, const char *envval, int overwrite);
описание
Функция setenv () должна обновить или добавить переменную в среде вызывающего процесса. Аргумент envname указывает на строку, содержащую имя переменной среды для быть добавлены или изменены. Переменная окружения должна быть установлена на значение, на которое указывает envval. Функция выходит из строя, если envname указывает на строку, содержащую символ'='. Если переменная среды с именем envname уже существует, и значение перезаписи ненулевое, функция должна возвращать успех, и среда должна быть обновлена. Если среда переменная с именем envname уже существует, и значение перезаписи равно нулю, функция возвращает успех, а среда остается неизменной.если приложение изменяет environ или указатели, на которые он указывает, поведение setenv () не определено. Функция setenv() обновит список указателей, на которые environ точки.
строки, описанные 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()
.