Приложение C Producer/Consumer, получающее переменные окружения с не работающим getenv()

Я пишу заявление с продюсером, который создает и отправляет сообщения, и с потребителем, который получает сообщения. Я должен установить переменную среды в приложении производителя и прочитать его в потребительском приложении.

В приложении производителя я сделал эту команду

putenv("MSG_KEY=15");

И в потребительском приложении я попытался получить переменную, как это

char *z=getenv("MSG_KEY");

Но это не возвращает никакого значения (я получаю нулевое значение). Если я пишу ту же команду в продюсере, она работает, если я использую putenv() несколько строк раньше. Я думаю, проблема в том, что она устанавливает переменную только локально, поэтому я не могу получить к ней доступ из другой программы, но я не знаю, как ее решить. Не знаю, имеет ли это значение, но я использую систему Linux.

1 ответ

Решение

Переменные среды являются частными для процесса. Вы не можете установить их в одном процессе и ожидать, что прочитаете их в другом процессе.

Единственный раз, когда вы можете передавать что-либо через переменные окружения другому процессу, - от родительского процесса к дочернему, и только в тот момент, когда родительский процесс порождает дочернего процесса. Родитель может копировать, изменять, добавлять или удалять переменные окружения, когда он порождает потомка. С тех пор они становятся полностью отделенными. Изменение, которое один процесс вносит в переменные, невидимо для другого.

Другие вопросы по тегам