This blog post has been published on 2011-01-16 and may be out of date.
In dem Buch “Linux Programmierung” habe ich ein schönes Beispiel für Umgebungsvariablen unter Linux gefunden, welches ich gerade ein wenig Kommentiert habe… :-)
“Beachten Sie, dass sich die Umgebung nur lokal zum Programm verhält. Änderungen, die innerhalb des Programmes durchgeführt werden, werden nicht nach außen reflektiert, da Variablenwerte nicht vom untergeordneten Prozess (unser Programm) an den übergeordneten Prozess (die Shell) propagiert werden.” – Seite 166
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
/* argc -> Anzahl Kommandozeilenparameter + Programmnamen (1), somit ist der Wert min. 1 */
/* argv -> ist ein Zeiger auf das Feld (Array) mit der in argc angegebene Anzahl von Elementen...
... und die Elemente (z.B.: argc[0] sind Zeiger auf eine Zeichenkette...
arg[0] -> Programmname
arg[1] -> 1. Parameter
arg[2] -> 2. Parameter
[...]
arg[n] -> letzter Parameter
0L -> das letzte Element von argv[] einthaelt eine Null
*/
int main(int argc, char *argv[]) {
char *var, *value;
// wenn kein oder mehr als 3 Parameter uebergeben wurden, dann ...
if (argc == 1 || argc > 3) {
// Fehlermeldung ausgeben und Programm beenden
fprintf(stderr,"usage: environ var [value]\n");
exit(1);
}
// 1. Parameter in die Variable "var" schreiben
var = argv[1];
// mit getenv den Wert der Umgebungsvariablen abrufen
// und in die Variable "value" schreiben
value = getenv(var);
// wenn value wahr bzw. vorhanden ist, dann ...
if (value) {
printf("Variable %s has value %s\n", var, value);
// ... ansonsten ...
} else {
printf("Variable %s has no value\n", var);
}
// wenn 2. Parameter uebergeben wurden, dann ...
if (argc == 3) {
char *string;
// 2. Parameter in die Variable "value" schreiben
value = argv[2];
// Speicherbereich fuer die Umgebungsvariablen + Wert anlegen
string = malloc(strlen(var)+strlen(value)+2);
// wenn string nicht wahr bzw. nicht vorhanden ist, dann ...
if(!string) {
// Fehlermeldung ausgeben und Programm beenden
fprintf(stderr,"out of memory\n");
exit(1);
}
// strcpy - Stringfunktion zum kopieren einer Zeichenkette (string <- var)
strcpy(string,var);
// strcat - Stringfunktion zum verketten von Strings (string=)
strcat(string,"=");
// strcat - Stringfunktion zum verketten von Strings (string=value)
strcat(string,value);
printf("Calling putenv with: %s\n", string);
//
// putenv - Aendert oder setzt eine Umgebungsvariable, gibt -1 bei einem Fehler
// und 0 bei keinem Fehler aus
//
// wenn nicht gleich 0 -> wenn ein Fehler aufgetreten ist , dann ...
if (putenv(string) != 0) {
// Fehlermeldung ausgeben, Speicher wieder freigeben und Programm beenden
fprintf(stderr,"putenv failed\n");
free(string);
exit(1);
}
// den Wert der Umgebungsvariablen in der Variablen "var"
// in die Variable "value" schreiben
value = getenv(var);
// wenn value gleich wahr bzw. gesetzt, dann ...
if (value) {
// Umgebungsvariablen + neuen Wert ausgeben
printf("New value of %s is %s\n", var, value);
// ... ansonsten ...
} else {
// Umgebungsvariablen + ? ausgeben
printf("New value of %s is null??\n", var);
}
}
exit(0);
}