====== Environment lesen ======
Verschiedene Wege, die Environment-Variablen zu lesen.
===== main() =====
Auf POSIX-Systemen ist es möglich, die main()-Funktion mit 3 Parameter zu verwenden:
int main(int argc, char *argv[], char *envp[])
{
} // main()
Das dritte Argument **envp** referenziert die Environment des Programms. Es ist ein String-Array.
===== environ =====
Das gleiche kann man über die Variable **%%char ** environ%%** erreichen. Die Environment wird als Array of Strings organisiert. Jeder String liegt in der Form **name=value** vor. Das letzte Element des Arrays ist ein NULL.
Diese Variable ist im Header-File **unistd.h** deklariert.
===== getenv() =====
Die bessere Variante ist die Funktion **getenv()** bzw. **secure_getenv()**, deklariert in .
char* getenv(const char* name);
char* secure_getenv(const char *name);
Wenn der Parameter "name" nicht definiert ist, ist das Ergebnis ist NULL.
:!: Die Funktion **secure_getenv()** ist der getenv() ähnlich, gibt aber auch dann NULL zurück, wenn die Environment "unsicher" ist. Das ist der Fall, wenn bei dem Programm das Flag SUID oder SGID gesetzt ist. Auch allgemeine Libraries sollten immer die Funktion secure_getenv() nutzen anstelle von getenv(), um möglicher Verwundbarkeit vorzubeugen, wenn die Library von einem SUID/SGID-Programm verlinkt wird.
===== getenv_s() =====
Seit C11 steht auch folgende Funktion zur Verfügung:
errno_t getenv_s(size_t *restrict len, char *restrict value, rsize_t valuesz, const char *restrict name);
Vorteil dieser Funktion ist, dass der Inhalt der Environment-Variable nicht als Pointer, sondern als Kopie über das Argument **value** zurückgegeben wird.
Detailliertere Beschreibung auf: [[http://en.cppreference.com/w/c/program/getenv]]
----
Stand: 18.01.2016\\
--- //[[feedback.jk-wiki@kreick.de|: Jürgen Kreick]]//
EOF