domingo, 2 de outubro de 2011

Imprimindo variáveis de ambiente (Environment Variables) em seu programa C - Linux

Pessoal,
hoje vamos trabalhar um pouco com as variáveis de ambiente do sistema operacional Linux. Vamos imprimir as variáveis de ambiente na tela, um programa bem simples que vai fazer usado da função "getenv" que prcisa do include: "unistd.h" Essa função é responsável por procurar a variável informada em uma lista de variáveis de ambiente e nos retornar seu valor. Na verdade ele retorna o valor da primeira ocorrência encontrada. Em C para fazermos o acesso as variáveis de ambiente, podemos fazer através de um ponteiro externo, cujo nome é "environ" como pode ser visto no código abaixo:


#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>


void imprimeVariaveisDeAmbiente();
void imprimeVariavel(char *var);
int menuDeOpcoes();

extern char** environ;
int main()
{
    int op;
    char  varAmb[40];

    do
    {
        op = menuDeOpcoes();
        switch(op)
        {
            case 1: imprimeVariaveisDeAmbiente();
                    break;
            case 2: printf("\n\tInforme nome da variavel:\t");

                    scanf("%s",varAmb);
                    imprimeVariavel(varAmb);
                    break;
        }
    }while(op<3);

    return 0;
}

void imprimeVariaveisDeAmbiente()
{

    printf("\n\t----Imprimindo varia¡veis de ambiente!!!----");
    char ** pEnviron = environ;
    for(;*pEnviron;*pEnviron++)
    {
        printf("\n%s",*pEnviron);
    }
}

void imprimeVariavel(char *var)
{
    char * result;

    result = getenv(var);
    if(result != NULL)
        printf("\n\tVariavel:\n\t%s",result);
    else
        printf("\n\tNao encontrado!!!");
}

int menuDeOpcoes()
{
    int opcao;
    printf("\n\t1 - Imprimir todas as variaveis;");
    printf("\n\t2 - Inmprimir uma variavel;");
    printf("\n\t3 - Sair");
    printf("\n\tSelecione a opcao:\t");
    scanf("%d",&opcao);
    return opcao;
}