[so] [Linux] Comportament ciudat variabile de mediu

ana-maria lepar amylepar at gmail.com
Sat Mar 28 23:21:50 EET 2009


Salut,

Am rezolvat dilema :

Cod :
========================================
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int main(int argc, char ** argv){
        char * rez ;
        char * var = (char *) malloc (10);
        if (! var) return -1;
        strcpy(var,"$HOME");

        printf(" var = %s \n", var);
        rez = getenv(var);
        printf(" rez pentru var  %s =%s \n", rez, var);

        rez = getenv(var+1);
        printf(" rez pentru var+1  : %s = %s \n", rez, var+1);

        free(var);

        //cazul cu argv[1] = "$HOME"
        printf("argv[1] = %s \n", argv[1]);
        rez = getenv(argv[1]);
        printf("pentru argv[1] = var mediu = %s \n", rez);
        free(rez);
        return 0;
}
===========================================


Rezultat :
==========================================
so at elmer:~/teme/tema1_linux/teste_moi$ ./a.out $HOME
 var = $HOME
 rez pentru var  (null) =$HOME
 rez pentru var+1  : /home/so = HOME
argv[1] = /home/so
pentru argv[1] = var mediu = (null)
so at elmer:~/teme/tema1_linux/teste_moi$
============================================

Concluzia mea (nu stiu daca este corecta in totalitate) :
  - deja cand ii dau ca parametru $HOME, el face interpretarea si in argv[1]
nu imi va stoca $HOME ci chiar valorea variabilei si pe urma va face un
getenv("/home/so") si nu o va gasi si va intoarce 0
  - legat de 1) :  "*De ce faci argv[1] + 1? E suficient argv[1]*. " getenv
primeste ca parametru numele variabilei de mediu fara $   [am testat
exemplele cu var si var +1).


Multumesc
Ana
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://cursuri.cs.pub.ro/pipermail/so/attachments/20090328/80d73754/attachment.htm>


More information about the so mailing list