Die Funktion main |
Zunächst soll der Rahmen betrachtet werden, in dem sich ein Programm bewegt. Das ist zwar eigentlich nicht Bestandteil der Systemaufrufe, gibt aber einen ersten Einblick, in welcher Umgebung sich ein Programm unter UNIX bewegt. Ein C-Programm wird immer mit der Funktion main() gestartet. Diese hat drei Parameter, von denen normalerweise nur die ersten beiden verwendet werden. Der dritte Parameter hält das Environment, das aber auch per getenv() gelesen werden kann.
int main(int argc, char **argv)
{
return 0;
}
|
tudochwas -f huhu lol* |
Wenn im aktuellen Verzeichnis die Dateien lolita}, lolli und lonzo stehen, sind die Parameter von main folgendermaßen belegt: In argc steht eine 5. Im Element argv[0] findet sich der Name des Programmes inklusive Pfad, in diesem Fall >>./tudochwas<<. Da tudochwas aus dem aktuellen Verzeichnis gestartet wurde und kein Pfad angegeben wurde, bemühte die Shell die Variable PATH. Darin fand sie dann den Pfad . und setzte ihn vor den Programmnamen. argv[1] enthält die Option -f und argv[2] den Parameter >>huhu<<. Die weiteren Elemente von argv hängen von den Dateien im aktuellen Verzeichnis ab. Da auf lol* sowohl lolita als auch lolli passen, füllen diese die nächsten zwei argv-Elemente.
int main(int argc, char **argv)
{
int i;
for (i=0; i<argc; i++) {
puts(argv[i]);
}
return 0;
}
|
main(int argc, char **argv, char **env)
{
int i;
char *str;
if (env) {
i=0;
while(str = env[i]) {
puts(env[i++]);
}
}
}
|
Wer das Programm startet bekommt eine riesige Liste, von der hier nur ein kurzer Ausschnitt angezeigt wird:
WINDOWMANAGER=/usr/X11R6/bin/kde HOME=/home/arnold TERM=xterm XNLSPATH=/usr/X11R6/lib/X11/nls no_proxy=localhost |
#include <stdlib.h>
char *getenv(const char *name);
int putenv(const char *string);
|
Sofern die als Parameter angegebene Variable gesetzt ist, bekommt man einen Zeiger auf den Wert zurückgeliefert. Da dieser Zeiger beim nächsten Aufruf von getenv verloren gehen kann, sollte man das Ergebnis in eine lokale Variable kopieren, wenn man ihn später noch braucht. Es ist auch möglich, vom Programm aus Umgebungsvariablen zu setzen. Dazu dient die Funktion setenv(). Als Parameter erwartet sie einen vollständigen Variableneintrag der Form var=wert. Beispiel:
putenv("TERM=vt100");
|
|
Diese Seite basiert auf Inhalten aus dem Buch
Arnold Willemer: Wie werde ich UNIX-Guru Verlagsrechte bei galileo computing |
| Homepage |
(C) Copyright 2002 Arnold Willemer
|