Umgebungsvariablen



  • Hallo Forum,
    ich möchte in einer Klasse auf das gesammte Environment eines Programms zugreifen. Mit

    char *getenv(const char *name);
    

    kann ich nur auf Variablen zugreifen die ich kenne und mit

    int main ( int argc, char** argv, char** env){/*..*/}
    

    habe ich das Zeug nur in der main, ergo: nutzbar aber unschön.
    Dann habe ich noch ( edit )

    #include <unistd.h>
    extern char **environ;
    

    gefunden. Dass ist schon ganz schön, aber sehr C-Style und mit

    #ifdef __USE_GNU
    extern char **environ;
    #endif
    

    sehr unportabel.
    Gibt es nicht eine Möglichkeit den Zeiger char** env durch einen Systencall zu ermitteln?
    Danke für Tipps!

    Mario

    PS: Sollte das hier OT sein weil es Unix spezifisch ist bitte verschieben. Ich arbeite nur unter Unix und kann nicht einschätzen was nun allgemein ist und was nicht! Danke

    [ Dieser Beitrag wurde am 23.04.2003 um 12:27 Uhr von Peanut editiert. ]



  • ich möchte in einer Klasse auf das gesammte Environment eines Programms zugreifen.

    Uebergib doch der Klasse beim erstellen die Variable 'env'

    mfg
    v R



  • Was ist das für eine main-Funktion?
    Ist sowas denn portabler als das extern char** environ (wo in meiner manpage irgendwie auch gar kein KONFORM TO drin ist..) ?



  • Original erstellt von virtuell Realisticer:
    **Uebergib doch der Klasse beim erstellen die Variable 'env'
    **

    Das meinte ich mit

    ...nutzbar aber unschön.

    😃

    Original erstellt von DrGreenthumb:
    Was ist das für eine main-Funktion?

    #include <iostream>
    int main ( int argc, char** argv, char** env){
            char ** var;
            for ( var=env; *var != NULL; ++var ) {
                    std::cout << *var << std::endl;
            }
    }
    

    Original erstellt von DrGreenthumb:
    Ist sowas denn portabler als das extern char environ (wo in meiner manpage irgendwie auch gar kein KONFORM TO drin ist..) ?**

    Na du kennst den "extern char** environ" Zeiger wenigstens! Wo kommt der den her?

    [ Dieser Beitrag wurde am 23.04.2003 um 14:22 Uhr von Peanut editiert. ]



  • Original erstellt von Peanut:
    ```cpp
    #include <iostream>
    int main ( int argc, char
    argv, char** env){
    char ** var;
    for ( var=env; *var != NULL; ++var ) {
    std::cout << *var << std::endl;
    }
    }

    Ähm, ja. soweit war ich schon 🙂 Was ich meine ist, wer sagt ob das korrekt ist, bzw. nimmt sowas auch ein anderer Compiler als der gcc?
    Normalerweise lautet die main-Funktion nur main(int, char**) oder main().

    Na du kennst den "extern char** environ" Zeiger wenigstens! Wo kommt der den her?

    hm.. wie gesagt, meine manpage schweigt sich darüber aus. Irgendwie würde ich aber eher die Variable nehmen, als dieses ominöse main()-Konstrukt.



  • Original erstellt von DrGreenthumb:
    Was ich meine ist, wer sagt ob das korrekt ist, bzw. nimmt sowas auch ein anderer Compiler als der gcc?

    Weiß ich. Steht in der Norm :).
    Das ist POSIX (wenn ich mich recht erinnere) und damit recht portabel.

    [Langsam kenne ich mich nicht mehr aus: Im C++-Forum erwähnt man nur die Wortkombination 'globale Variable' und bekommt schon 10 Singleton-Empfehlungen. Hier will jemand seine lokale Variable nicht, weil es 'unschön' ist. Naja :-}.]


Anmelden zum Antworten