Environment Variable
-
hab ne frage zum thema getenv():
der thread zugriff auf systemvariablen scheint nicht mehr gelesen zu werden aber die lösung des problems wäre recht wichtig, hoff ihr seit nicht böse.ist es möglich, dass getenv die änderung einer environment variable während der laufzeit mitbekommt??
folgendes problem:
hab einen hintergrundprozess der eine environment variable einliest und falls diese einen bestimmten wert hat in einer endlosschleife hängen bleibt. wenn sich die variable ändert oder mit unsetenv (CSH) gelöscht wird, soll das prozess weiter arbeiten also nicht mehr in der schleifen laufen. dies funktioniert allerdings nicht, da der prozess anscheinend beim initalisieren die environment variablen einliest und mit getenv danach auf eine gespeicherte, sprich nicht aktulle, version zu greift. habt ihr da vielleicht irgendeine lösung, dass ich die environment variable auch zur laufzeit ändern kann und der prozess das mitbekommt??LG Patrick
PS: habe sogar versucht mit:
(system("unsetenv VAR")
die variable im C-Programm direkt zu löschen, aber das hatte auch keinen erfolg.
-
Jedes Programm kriegt normalerweise beim Start ein Kopie aller Umgebungsvariablen mitgegeben.
Wenn das Programm, das dein Programm aufgerufen hat, seine Umgebungsvariablen ändert, bemerkt dein Programm es nicht, weil sich seine Kopie der Variablen natürlich nicht verändert hat.
Wenn du mit System arbeitest, dann ruft dein Programm einen Shell auf, der eine Kopie alle Umgebungsvariablen enthält, diese werden dann verändert, nicht aber die, deines Programms. Der Shell wird beendet, und mit ihm verschwindet auch die änderung deiner Variablen.
Eine Inter-Prozess-Komunikation mit Umgebungsvariablen zu bauen ist also nicht wirklich möglich.
-
schau mal hier: man: unsetenv(3)
-
und es ist nicht möglich diesen ladeprozess, welcher eine kopie der umgebungsvariablen erstellt noch mal zu starten???
lg Patrick
-
guest34534 schrieb:
und es ist nicht möglich diesen ladeprozess, welcher eine kopie der umgebungsvariablen erstellt noch mal zu starten???
Schon, du musst nur das Programm, dass die neuen Variablen erhalten soll, aus deinem Programm herraus neustarten. :p
Edit:
Das ist so, als wenn du fragen würdest, ob man die Commandozeilen Argumente, die man einem Programm übergeben hat, später noch ändern könnte.
-
das is ja blöd. hmm ...
neu aufrufen funkt net so ganz weil es ja darum geht, dass er in der endlosschleife hängt und nur wenn die env-variable sich geändert hat, soll er aus der schleife rausspringen. vor der schleife passiert allerdings schon so manches, dass nicht nochmal gemacht werden soll.
ich hab da eher an so ne art init_getenv oder so gedacht (hab jetzt das getenv.c nicht zur hand, aba dort fand ich soetwas ähnliches). es muss ja möglich sein, die variablen auch zur laufzeit einzulesen, da es im grunde ja auch nur eine funktion sein kann, die das einlesen am anfang macht.lg Patrick
-
guest35244 schrieb:
es muss ja möglich sein, die variablen auch zur laufzeit einzulesen, da es im grunde ja auch nur eine funktion sein kann, die das einlesen am anfang macht.
Das ist richtig. Nur befindet sich diese Funktion im Kernel des Betriebssystems. Nur der Kernel hat die Rechte, die Umgebungsvariablen von einem Prozess in einen anderen zu kopieren.
Es hat schon Gründe, warum man solche Komunikation mit Sockets oder Pipes macht.