ein Kapitel zurück                                           ein Kapitel weiter

Um in der Environment-Liste Einträge zu ändern , neue Einträge hinzufügen oder Einträge löschen stehen unter Linux/Unix die Funktionen putenv, setenv und unsetenv zur Verfügung. Hier der Syntax...

#include <stdlib.h>

int putenv(const char *eintrag);

int setenv(const char *name,const char *wert, int overwrite);

void unsetenv(const char *name);  

Zuerst zur Funktion putenv. putenv nimmt den String eintrag, den sie in Form von name=wert (z.B. : PATH=/home/bla/bla....) eingeben müssen, und trägt diesen in die Environment - Liste ein. Ist dieser name bereits vorhanden wird dieser zuvor noch aus der Liste entfernt. Der Rückgabewert der Funktion ist 0 wenn alles Ok ging ansonsten ungleich 0. Hier ein Beispiel .....

/*Download:env5.c*/
#include <stdio.h> #include <stdlib.h> int main() { if((putenv("NNTPSERVER=news.btx.dtag.de")) != 0) printf("Konnte nicht in die Environment - Liste schreiben!\n"); return 0; }

Mit diesem kleinem Programm schreiben wir in die Environment - Liste unseren Newsserver. In dem Fall ist es der von T-Online. Kommen wir zur 2. und wie ich finde besseren Möglichkeit in die Environment - Liste einen Eintrag zu machen. setenv : Mit setenv machen sie in der Environment - Liste ebenfalls einen Eintrag mit name=wert. Dieses mal aber wird der Name nur überschrieben wenn die Variable overwrite in setenv einen Wert ungleich 0 hat. Wenn sie jetzt z.B. eingeben...

setenv("NNTPSERVER","news.btx.dtag.de",0);  

...wird, falls bereits ein NNTPSERVER vorhanden ist, dieser nicht überschrieben da wir als 3. Parameter in setenv eine 0 angegeben haben. Sollten sie den alten Newsserver einfach überschreiben wollen so brauchen sie nur einen Wert ungleich 0 anzugeben. Aber dafür haben wir ja die Funktion putenv(..). Hierzu nun ein kleines Beispiel...

/*Download:env6.c*/
#include <stdio.h> #include <stdlib.h> int main() { if((setenv("NNTPSERVER","news.bla.bla.de",0)) != 0) printf("Fehler bei setenv......\n"); return 0; }

Dazu muss ich noch anmerken das auch wenn bereits ein Newsserver vorhanden ist und nicht in diesem geschrieben wird, das dies nicht als Fehler gewertet wird. Als letztes bleibt uns noch unsetenv.

unsetenv : Mit unsetenv können sie den zum angegeben Namen gehörenden Eintrag löschen.

/*Download:env7.c*/
#include <stdio.h> #include <stdlib.h> int main() { unsetenv("NNTPSERVER"); return 0; }

In diesem Fall wird der von uns (falls) eingetragenen Wert "news.btx.dtag.de" gelöscht. Auch hier kommt keine Fehlermeldung falls es keinen zu löschenden Wert gibt.

Der Eine oder Andere wird jetzt vielleicht auch Ausprobiert haben die ganze Environment - Liste ausgeben zu lassen und dabei bemerken das sich der NNTPSERVER gar nicht geändert hat.

Wir haben nur an der Environment - Liste unseres Programms geändert aber nicht die der Shell. Man bekommt dabei eine eigene Kopie an der man rumspielen darf aber nicht das was wir eigentlich wollten. Und das ist auch gut so. Als Beweis das das ganze doch Funktioniert machen wir einen Test....

Geben sie in der Kommandozeile folgendes ein...

cat < 'EOF' > /tmp/environ.c  

Jetzt erfolgt erfolgt ein...

>  

....am Anfang der Zeile. Geben sie jetzt folgendes ein...

>#include <stdio.h>
>#include <stdlib.h>
>
>int main()
>{
>if((putenv("NNTPSERVER=news.bla.bla.de")) != 0)
>printf("Fehler\n");
>system("/bin/sh");
>return 0;
>}
>EOF  

Machen sie ich über die Zeile system(..) noch nicht allzu viel Gedanken. Wir kommen in dem nächsten Kapitel dazu. Übersetzten sie jetzt das Programm das sich Verzeichnis /tmp befindet mit...

gcc -o /tmp/enviro /tmp/enviro.c  

Starten sie nun das Programm mit....

/tmp/enviro  

Jetzt befinden sich sich im Eingabeprompt der Shell (system("/bin/sh")) ....

sh-2.04$  

Jetzt wollen wir testen ob sich was in dem Eintrag NNTPSERVER etwas geändert hat...

sh-2.04$ echo $NNTPSERVER  

Jetzt müsste auf Ihrem Bildschirm stehen....

news.bla.bla.de  

Normalerweise müsst jetzt alles funktioniert haben. Geben sie um die Shell wieder zu verlassen exit ein.

ein Kapitel zurück          nach oben           ein Kapitel weiter


© 2001,2002 Jürgen Wolf