Использование setenv () в C - PullRequest
       19

Использование setenv () в C

0 голосов
/ 25 октября 2019

Я пытаюсь понять, как работает setenv (). Документация:

setenv (const char *name, const char *value, int overwrite)

Я хочу иметь возможность редактировать массив переменных среды. Например, я хочу установить

envp[1] = "Hello World"

Я смущен функцией setenv, хотя и не уверен, как реализовать в этой функции. Будет ли перезаписан индекс массива среды. Повлияет ли это на печать всех подобных сред?

#include <stdio.h>

void main(int argc, char *argv[], char * envp[])
{
    int i;

    for (i = 0; envp[i] != NULL; i++)
    {    
        printf("\n%s", envp[i]);
    }
}

Таким образом, вместо того, что обычно было бы в envp [1], оно изменено на «Hello World». Я также не уверен, что перезапись, установленная на 1, означает envp [1].

1 Ответ

2 голосов
/ 26 октября 2019

Почему вы хотите изменить массив переменных среды? envp - это просто копия переменных среды при запуске программы.

Во-первых, «Hello World» не является допустимой переменной среды. Переменная окружения, как и любая другая переменная, имеет идентификатор (имя) и значение. Хорошо иметь переменную окружения STR = HelloWorld.

Если вы просто хотите установить вышеуказанную переменную окружения, просто вызовите setenv("STR", "HelloWorld", 1). Флаг 1 перезаписи гарантирует, что предыдущее значение STR будет перезаписано этой функцией. Если флаг перезаписи равен 0, setenv не изменяет значение переменной среды, если оно уже установлено.

Повлияет ли это на печать всех сред, подобных этой?

Это не меняет значение, когда я тестировал его с помощью gcc. Причина в том, что функции getenv() и setenv() используются парами для доступа к переменным среды. Строка массива c envp - это просто массив переменных среды, когда программа запускается. Кроме того, envp обычно не передается от основной функции, что означает, что другие функции не знают о envp .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...