[英]Set local environment variables in C++
How do I set an environment variable in C++?如何在 C++ 中设置环境变量?
Thanks谢谢
NAME putenv - change or add an environment variable SYNOPSIS #include <stdlib.h> int putenv(char *string); DESCRIPTION The putenv() function adds or changes the value of environment variables. The argument string is of the form name=value. If name does not already exist in the environment, then string is added to the environment. If name does exist, then the value of name in the environment is changed to value. The string pointed to by string becomes part of the environment, so altering the string changes the environment.
On Win32 it's called _putenv I believe.在 Win32 上,我相信它被称为 _putenv。
See SetEnvironmentVariable also if you're a fan of long and ugly function names.如果您喜欢又长又丑的函数名,请参阅SetEnvironmentVariable 。
There's also setenv
, which is slightly more flexible than putenv
, in that setenv
checks to see whether the environment variable is already set and won't overwrite it, if you set the "overwrite" argument indicating that you don't want to overwrite it, and also in that the name and value are separate arguments to setenv
:还有setenv
,它比putenv
稍微灵活一点,因为setenv
检查环境变量是否已经设置并且不会覆盖它,如果你设置了“overwrite”参数表明你不想覆盖它,而且名称和值是setenv
单独参数:
NAME
setenv - change or add an environment variable
SYNOPSIS
#include <stdlib.h>
int setenv(const char *name, const char *value, int overwrite);
int unsetenv(const char *name);
Feature Test Macro Requirements for glibc (see feature_test_macros(7)):
setenv(), unsetenv():
_POSIX_C_SOURCE >= 200112L
|| /* Glibc versions <= 2.19: */ _BSD_SOURCE
DESCRIPTION
The setenv() function adds the variable name to the environment with
the value value, if name does not already exist. If name does exist
in the environment, then its value is changed to value if overwrite
is nonzero; if overwrite is zero, then the value of name is not
changed (and setenv() returns a success status). This function makes
copies of the strings pointed to by name and value (by contrast with
putenv(3)).
The unsetenv() function deletes the variable name from the
environment. If name does not exist in the environment, then the
function succeeds, and the environment is unchanged.
I'm not saying either is better or worse than the other;我并不是说其中一个比另一个更好或更差; it just depends on your application.这仅取决于您的应用程序。
See http://man7.org/linux/man-pages/man3/setenv.3.html见http://man7.org/linux/man-pages/man3/setenv.3.html
I'm not positive environment variables are what you need, since they aren't going to be used outside of this run of the program.我不是肯定的环境变量是你所需要的,因为它们不会在程序运行之外使用。 No need to engage the OS.无需使用操作系统。
You might be better off having a singleton class or a namespace that holds all these values, and initialize them when you start the program.您最好拥有一个单例类或一个包含所有这些值的命名空间,并在您启动程序时对其进行初始化。
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char* argv[])
{
char *var, *value;
if (argc == 1 || argc > 3) {
fprintf(stderr, "usage:environ variables \n");
exit(0);
}
var = argv[1];
value = getenv(var);
//---------------------------------------
if (value) {
printf("variable %s has value %s \n", var, value);
}
else
printf("variable %s has no value \n", var);
//----------------------------------------
if (argc == 3) {
char* string;
value = argv[2];
string = malloc(strlen(var) + strlen(value) + 2);
if (!string) {
fprintf(stderr, "out of memory \n");
exit(1);
}
strcpy(string, var);
strcat(string, "=");
strcat(string, value);
printf("calling putenv with: %s \n", string);
if (putenv(string) != 0) {
fprintf(stderr, "putenv failed\n");
free(string);
exit(1);
}
value = getenv(var);
if (value)
printf("New value of %s is %s \n", var, value);
else
printf("New value of %s is null??\n", var);
}
exit(0);
} //----main
# commands to execure on linux
# compile:
$ gcc -o myfile myfile.c
# run:
$./myfile xyz
$./myfile abc
$./myfile pqr
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.