Удалить переменную окружения программно

Мне нужно написать модульный тест для некоторого кода C++, который проверяет наличие переменной окружения. Я использую MSVS 2008 и gtest в качестве основы. Я добавляю переменную окружения с помощью putenv, проверяю переменную окружения с помощью getevn, но не могу понять, как ее убрать, чтобы ни один другой тест ее не увидел. Я понимаю, что это, вероятно, легко, но я не могу найти ответ в Интернете. Спасибо


person Steve    schedule 08.07.2010    source источник


Ответы (4)


Повторный вызов putenv с указанием "SOME_VAR=" в качестве параметра удалит переменную среды SOME_VAR. Кстати, Microsoft рекомендует использовать _putenv, поскольку putenv устарело.

person 341008    schedule 08.07.2010
comment
Обратите внимание, что, по крайней мере, для Solaris эта функция не упоминается на странице руководства. - person Mark B; 08.07.2010
comment
Он использует MSVS 2008. Подразумевается, что он работает в Windows. В Linux я бы использовал setenv и unsetenv. Не знаю, есть ли они у Соляриса. - person 341008; 08.07.2010

Вы всегда можете разветвить/выполнить подпроцесс, чтобы выполнить только тестирование putenv/getenv, а затем, когда он завершится, не останется никакой случайной среды.

person Mark B    schedule 08.07.2010
comment
Я думал об этом, но искал более чистое решение - person Steve; 08.07.2010

Как насчет установки env var в пустую строку?

Из cmd.exe это работает:

set SOMEVAR=something
echo %SOMEVAR%
set SOMEVAR=
echo %SOMEVAR%

Где последний показывает, что он был удален.

person rubenvb    schedule 08.07.2010

вы можете использовать функцию unsetenv.

Если в vc2008 эта функция отсутствует, вы можете получить прямой доступ к среде, используя getenv_s и удалите запись вручную, имитируя unsetenv.

person tonio    schedule 08.07.2010
comment
Это действительно доступно в Windows без использования подсистемы POSIX? Google выдает противоречивые результаты... - person Nicholas Knight; 08.07.2010