Alguém na prática usa o ambiente diretamente para acessar variáveis de ambiente? [fechadas]

1

C funções da biblioteca padrão getenv e setenv podem ser usadas para acessar variáveis de ambiente para um processo.

No Linux, há uma variável global documentada environ que contém cadeias de valores de variáveis de ambiente, portanto, pode-se, em princípio, usá-las diretamente e não usar getenv e setenv .

Minhas perguntas são:

  1. Por que environ é exposto e documentado ao programador da aplicação, onde parece desnecessário fazê-lo?

  2. Algum software agora, ou é um software futuro, provavelmente usará environ diretamente?

por user322908 07.02.2017 / 02:47

1 resposta

2
  1. Para responder sua segunda pergunta primeiro,
    • Trivially, os programas env e printenv use environ para listar todo o ambiente.
    • A maioria das camadas usa environ para copiar cada variável de ambiente em uma variável de shell exportada. (Por exemplo, no bash, comandos como set , export e declare (sem argumentos) listará todo o ambiente, juntamente com as variáveis não exportadas.
    • Eu não sei exatamente como eles lidam com isso, mas su e sudo passam uma cópia higienizada do ambiente aos programas que eles invocam. Eles podem fazer isso iterando pelo ambiente e decidir quais variáveis passar, quais omitir, e quais modificar.
  2. Por que environ está exposto e documentado ao programador de aplicativos?
    • Porque alguns programas precisam disso (veja acima).
    • O kernel precisa passar o ambiente para o processo (quando ele é iniciado) de alguma forma. getenv e setenv (e algumas outras coisas) precisa ter acesso ao ambiente. É complicado para o kernel para se comunicar com uma rotina de biblioteca que não está ativa (ou seja, para passar informações para qualquer parte do programa outro que a rotina que está invocando o kernel). Torna-se duplamente difícil, dado que, se você estiver usando bibliotecas estáticas, getenv e setenv nem serão vinculados à sua imagem do processo se o programa não ligar para eles. Usar uma variável global é a solução mais fácil.
    • Por que os designers / desenvolvedores fizeram isso dessa maneira? Por que não? O processo possui seu ambiente; é permitido fazer o que quiser com isso.
por 12.02.2017 / 09:26