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

前端 未结 3 1803
难免孤独
难免孤独 2021-01-19 05:41

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

相关标签:
3条回答
  • 2021-01-19 05:47

    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.

    0 讨论(0)
  • 2021-01-19 05:48

    This should work:

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

    outputs

    EXAMPLE=test

    0 讨论(0)
  • 2021-01-19 05:59

    Use setenv() api for setting environment variables in Linux

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

    Refer to http://www.manpagez.com/man/3/setenv/ for more information.

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

    0 讨论(0)
提交回复
热议问题