Inhaltsverzeichnis

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 <stdlib.h>.

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
: Jürgen Kreick

EOF