Zugriff auf Systemvariablen
-
Hi Horst2,
in der MSDN hab ich nichts dazu gefunden. In der Manpage wird beschrieben, dass die Funktionen versuchen Speicher zu allokieren.
Mir ging es aber auch mehr darum, ob es nötig ist, dass ich für selbst definierte Variablen Speicherplatz für diese allokieren sollte oder ob das nicht nötig sei:
char *Variable; Variable = getenv("PATH");
Also zum Beispiel mit
char *Variable = malloc(sizeof(char) * 1000);
und nach Benutzung halt
free(Variable);
Jetzt hänge ich noch an einem nächsten Problem, wie kann ich die Variable parsen (Inhalt Bsp.: /usr/local/bin:/user/sbin:/usr/bin).
In C++ kann man ja schön mit find und mid arbeiten. Ziel ist es ja, dass ich alle Einträge zwischen den Doppelpunkten filtern und ausgeben kann.Welche Möglichkeiten hab ich in c?
-
-
also ich habe gerade noch einmal ausprobiert (getenv). Ich brauchte weder Speicher zu allocieren noch freizugeben
mfg
Horst
-
Super danke, hab das gerade umgesetzt!
Bevor ich nen neuen Beitrag öffne, hab ich noch eine Frage (sorry beschäftige mich erst seit ein paar Tagen mit der Programmierung unter Unix).
Mit getenv kann man ja schön auf die Systemvariablen zugreifen. Nun hab ich mehrere system-Aufrufe in meinem Programm, die ich gerne ersetzen würde.
Gibt es auch eine Funktion mit der man die Ausgabe eines Shell-Befehls direkt in eine Variable umleiten kann (Bsp.: char *Variable = AusgabeVonBefehl)?
-
so eine Funktion ist mir nicht bekannt. du kannst aber die Ausgabe eines Shell-Befehls in eine Datei umleiten und dann den Inhalt der Datei in einer Variable speichern.
Beispiel:
ls -l > datei
-
Dressman1981 schrieb:
Gibt es auch eine Funktion mit der man die Ausgabe eines Shell-Befehls direkt in eine Variable umleiten kann (Bsp.: char *Variable = AusgabeVonBefehl)?
ich hab sowas noch nie gemacht, aber ich schätze, dass man Pipes dafür verwenden kann, oder du machst eine Umleitung in eine Datei und dann liest du die Datei, wobei ich von der Verwendung von system abrate.
In den man pages stand nix zu free(var), wenn var=getenv(...); sein soll und ich habe sowas nicht benutzt.
-
Hmm, gibt es da wirklich keinen Befehl?
Na ja, das mit der Erzeugung einer Datei hört sich nicht so praktikabel an. Die müsste dann ja vom Programm erst erzeugt und dann nach dem Befüllen wieder gelöscht werden.
Eigentlich müsste man doch die Ausgabe des Befehls auch einer selbst definierten Shell-Variable zuweisen können, oder? Wenn ja, wie würde das funktionieren?
Dann könnte ich ja wieder über den getenv-Befehl die eigene Variable und deren Inhalt auslesen.
-
was mir gerade noch einfällt ist, dass du den stdout umlegen kannst, z.B. in eine Datei. dann werden alle ausgaben die normalerweise in der Konsole erscheinen in die Datei geschreiben
-
Hallo,
vielleicht hilft popen weiter:
Beispiel:
http://www.erlenstar.demon.co.uk/unix/faq_8.html#SEC87MfG
-
Da war ja jemand noch lange wach!
Danke Probe-Nutzer!
Das war genau die Funktion, die ich gesucht habe!
-
hab auch ne frage zum thema getenv():
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.