How to set an environment variable when using system() to execute a command?

I'm writing a C program on Linux and need to execute a command with system(), and need to set an environment variable when executing that command, but I don't know how to set the env var when using system().

3

3 Answers

If you want to pass an environment variable to your child process that is different from the parent, you can use a combination of getenv and setenv. Say, you want to pass a different PATH to your child:

#include <stdlib.h>
#include <string.h>
int main() { char *oldenv = strdup(getenv("PATH")); // Make a copy of your PATH setenv("PATH", "hello", 1); // Overwrite it system("echo $PATH"); // Outputs "hello" setenv("PATH", oldenv, 1); // Restore old PATH free(oldenv); // Don't forget to free! system("echo $PATH"); // Outputs your actual PATH
}

Otherwise, if you're just creating a new environment variable, you can use a combination of setenv and unsetenv, like this:

int main() { setenv("SOMEVAR", "hello", 1); // Create environment variable system("echo $SOMEVAR"); // Outputs "hello" unsetenv("SOMEVAR"); // Clear that variable (optional)
}

And don't forget to check for error codes, of course.

This should work:

#include "stdio.h"
int main()
{ system("EXAMPLE=test env|grep EXAMPLE");
}

outputs

EXAMPLE=test

2

Use setenv() api for setting environment variables in Linux

#include <stdlib.h>
int setenv(const char *envname, const char *envval, int overwrite);

Refer to for more information.

After setting environment variables using setenv() use system() to execute any command.

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like