Am Mon, 2001-11-05 um 11.14 schrieb Bernd Brodesser:
* Thorsten Haude schrieb am 05.Nov.2001:
* Bernd Brodesser
[01-11-04 23:35]: * Thorsten Haude schrieb am 04.Nov.2001:
* Bernd Brodesser
[01-11-04 14:55]: int main (const int argc, const char **argv, const char **env); Das ist kein ISO-C. Das ist POSIX und es ist auch K&R, wenn man mal von const absieht, das es bei K&R nicht gibt. Schön, daß es immerhin Standards gibt, die es enthalten. Ich verzichte gerne auf nicht-ISO-Features.
Das sind Untemengen von ISO. Alles was POSIX ist ist AFAIK auch ISO. Es gibt keine andere Möglichkeit an die Umgebungsvariablen zu kommen, es sei den, man verwendet Routienen, die ihrerseits das dritte Argument von main auswerten.
man 3 getenv Beachte: .. CONFORMING TO SVID 3, POSIX, BSD 4.3, ISO 9899 .. Vgl auch man 3 setenv man 5 environ Um aber auf die Ausgangsfrage zurückzukommen, Umgebungsvariablen werden meist vom Start-Upcode eines Programmes, meist in Zusammenarbeit mit der libc des Systems, eines Programmes aus der Umgebung ihres Elternprozesses zusammengesucht ("vererbt") und in ein globales Array eingefügt. Dieses Array wird dann meist als 3. Argument an main() übergeben. getenv|setenv und Co. greifen dann über die libc (getenv etc. sind Teil der libc) auf dieses globale Array zu. Ob und wie die Argumente von main() implementiert sind ist dabei ganz entscheidend vom Startup-Code abhängig. Auf Embedded Systemen z.B. findet man dort oft main( 0, 0, 0 ), main(0,0) oder gar main(). Ralf