This article will outline how to modify environment variables from a running C process. It should be noted that setting variables from your C process into the environment will only persist during process lifetime. Environment variables are propagated forward to a child program, but not backward to the parent.
Earlier I wrote about creating, removing, changing environment variables directing in Bash, now I will show you how to do these modifications using C.
Creating An Environment Variable In C process
Creating the environment variable can easily be achieved using the C function int setenv(const char *name, const char *value, int overwrite);. It takes two parameters, the first parameter being the name of the environment variable, and the second being a flag outlining whether to overwrite a pre-existing variable of the same name.
#include<stdio.h>
#include <stdlib.h>
int main()
{
char *name = "DATA";
char *value = "erik";
if(setenv(name, value, 1) < 0){
fprintf(stderr, "Could not create environment variable.\n");
return -1;
}
fprintf(stdout, "-%s-\n", getenv("DATA"));
return 0;
}
The variable will persist for any children you may fork, or if you execute a system call to grab the variables.
Removing An Environment Variable Using unsetenv
To remove an environment variable using your C process, you may call int unsetenv(const char *name);. Where char *name is the name from the environment. If name does not exist in the environment, then the function succeeds, and the environment is unchanged.
unsetenv(name); |
Clear The Environment Using clearenv
To clear the entire environment you can:
clearenv(); |
Or
environ = NULL; |
Reading An Environment Variable Using getenv
To just read an environment variable there is the C call, char *getenv(const char *name);. This will return the value of the environment variable.
getenv(“data”); |
Those are the basic functions you can execute from your C process to set, remove, create those environment variables.
Comments