cenvironment-variablesexecgetenv

Failing to set environment variable


Can someone please help me figure out why I'm not getting the results im supposed to? from the textbook

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    char *my_env[] = {"JUICE = peaches and apples", NULL};
    execle("diner info", "diner info", "4", NULL, my_env);

    printf("Diners: %s\n", argv[1]);
    printf("Juice env: %s\n", getenv("JUICE"));
    return 0;

}

The program prints

Diners: (null)
Juice env: (null)`

Solution

  • Try it as it is shown in the text book:

    They are 2 programs:

    The first program prepares an environment and passes it to a second program that it also executes.

    // my_exec_program.c
    #include <unistd.h>
    
    int main(void)
    {
        char *my_env[] = {"JUICE=peaches and apples", NULL};
        execle("diner_info", "diner_info", "4", NULL, my_env);
    }
    

    The second program reads its environment and prints it.

    // diner_info.c
    #include <stdio.h>
    #include <stdlib.h>
    
    int main(int argc, char *argv[])
    {
      if (argc > 1)
      {
        printf("Diners: %s\n", argv[1]);
      }
      printf("Juice env: %s\n", getenv("JUICE"));
      return 0;
    }
    

    Terminal:

    gerhardh@xy:~/tests$ gcc -Wall -Wextra -pedantic my_exec_program.c -o my_exec_program
    gerhardh@xy:~/tests$ gcc -Wall -Wextra -pedantic diner_info.c  -o diner_info
    gerhardh@xy:~/tests$ ./diner_info 
    Juice env: (null)
    gerhardh@xy:~/tests$ ./my_exec_program 
    Diners: 4
    Juice env: peaches and apples
    gerhardh@xy:~/tests$ 
    

    Mixing the code and squeezing everything into one file will not work.