C: чтение, добавление, изменение и удаление переменных окружения (getvar, setvar, unsetenv)

Автор: | 01/22/2015
 

C_logoДля работы с переменными используются функции getvar() и setvar() из библиотеки stdlib.h.

Как понятно из названий — функция getvar() используется для получения значения переменной, а setvar() — для добавления или изменения.

Для демонстрации — напишем такой код:

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

int main () {

    char *home, *newvar;

    // получем занчение переменной $HOME
    home = getenv("HOME");

    // Создаём новую переменную $NEWVAR со значением newvarvalue-1
    setenv("NEWVAR", "newvarvalue-1", 0);
    // записываем занчение $NEWVAR в локальную переменную newvar
    newvar = getenv("NEWVAR");
    printf ("Home: %s, and NEWVAR: %sn", home, newvar);

    // задаём новое значение переменной, но т.к. int replace = 0 - оно не изменится
    setenv("NEWVAR", "newvarvalue-2", 0);
    newvar = getenv("NEWVAR");
    printf ("NEWVAR: %sn", newvar);

    // задаём новое значение переменной, но т.к. int replace = 1 - оно изменится
    setenv("NEWVAR", "newvarvalue-3", 1);
    newvar = getenv("NEWVAR");
    printf ("NEWVAR: %sn", newvar);

    return 0;
}

И результат выполнения:

$ gcc getenv.c -o getenv
$ ./getenv
Home: /home/setevoy, and NEWVAR: newvarvalue-1
NEWVAR: newvarvalue-1
NEWVAR: newvarvalue-3

Для удаления переменных — используется функция unsetenv().

Перепиешм предыдущий код:

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

int main () {

    char *newvar;

    // Создаём новую переменную $NEWVAR со значением newvarvalue-1
    setenv("NEWVAR", "newvarvalue", 0);
    // записываем занчение $NEWVAR в локальную переменную newvar
    newvar = getenv("NEWVAR");

    if (newvar) {
        printf ("NEWVAR: %sn", newvar);
    } else {
        printf ("NEWVAR not defined: %sn", newvar);
    }

    // удаляем переменную $NEWVAR
    unsetenv ("NEWVAR");
    newvar = getenv("NEWVAR");

    if (newvar) {
        printf ("NEWVAR: %sn", newvar);
    } else {
        printf ("NEWVAR not defined: %sn", newvar);
    }

    return 0;
}

Результат:

$ ./getenv
NEWVAR: newvarvalue
NEWVAR not defined: (null)