Приложение C Producer/Consumer, получающее переменные окружения с не работающим getenv()
Я пишу заявление с продюсером, который создает и отправляет сообщения, и с потребителем, который получает сообщения. Я должен установить переменную среды в приложении производителя и прочитать его в потребительском приложении.
В приложении производителя я сделал эту команду
putenv("MSG_KEY=15");
И в потребительском приложении я попытался получить переменную, как это
char *z=getenv("MSG_KEY");
Но это не возвращает никакого значения (я получаю нулевое значение). Если я пишу ту же команду в продюсере, она работает, если я использую putenv()
несколько строк раньше. Я думаю, проблема в том, что она устанавливает переменную только локально, поэтому я не могу получить к ней доступ из другой программы, но я не знаю, как ее решить. Не знаю, имеет ли это значение, но я использую систему Linux.
1 ответ
Переменные среды являются частными для процесса. Вы не можете установить их в одном процессе и ожидать, что прочитаете их в другом процессе.
Единственный раз, когда вы можете передавать что-либо через переменные окружения другому процессу, - от родительского процесса к дочернему, и только в тот момент, когда родительский процесс порождает дочернего процесса. Родитель может копировать, изменять, добавлять или удалять переменные окружения, когда он порождает потомка. С тех пор они становятся полностью отделенными. Изменение, которое один процесс вносит в переменные, невидимо для другого.