PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Setzen einer Enviroment Variable mittels putenv aus einer QT Anwendung heraus



tentlewi
22-01-2002, 16:25
Hallo,

ich habe folgendes Problem:

ich versuche mittels der putenv Funktion eine Enviroment Variable zu erzeugen, die ich mit einem Pfad füllen möchte.

der Code sieht gekürzt so aus :

int stat = putenv("LOGDPFAD=/usr/home");

if (!stat)
{
printf("Fehler... konnte Variable nicht setzen");
}
.........
Ich kriege immer wieder die Fehlermeldung sprich kann die Variable weder erzeugen noch setzten.
Mein Frage lautet : Was mache ich falsch ???? die Funktion getenv funktioniert z.B. einwandfrei.

danke für jeden Hinweis
Martin Tentlewitz

TThomas
22-01-2002, 16:56
Hoi tentlewi!

Haste schon mal die manpage zu putenv gelesen? :-)

Wenn ja, dann kannste dir die Frage selbst beantworten... :D



Thomas.

TThomas
22-01-2002, 17:01
Aber ich will ja mal nicht so sein... ;)

putenv leifert bei fehlerfreiem Ablauf 0 zurück, wenn also alles glatt läuft steht in deiner Abfrage !0, was TRUE entspricht, also trifft das if zu.

-> Fehlerbehandlung wird nur bei korrektem Ablauf durchlaufen, bei Fehler hingegen nicht! :D


Gruß, Thomas.

tentlewi
22-01-2002, 17:03
ich danke Dir fuer den Hinweis.... aber entweder bin ich heute schon zu lange an diesem Rechner dran oder ich sehe es einfach nicht... waere nett, wenn Du mir den entscheidenen Tip geben koenntest, damit meine Leiden ein Ende haben :rolleyes:

Martin

tentlewi
22-01-2002, 17:09
ok dass mit der If Abfrage war eigentlich nicht so wichtig, denn die hatte ich mir nur bauen wollen um zu sehen was da schief läuft.
auch wenn ich nur den putenv Befehl wie oben beschrieben setze und mir dann mit echo $LOGDPFAD usgeben lasse ist der Wert nicht gesetzt... das ist das eigentliche Problem.

habe ich da irgendwo einen fatalen Denkfehler ????

martin

tentlewi
23-01-2002, 08:49
Hab den Fehler gefunden....

Die Umgebungsvariable wird gesetzt, aber nur fuer den Laufenden Prozess, so dass ( logischerweise ) sie auch in der Shell mit echo $XY nicht sichtbar ist....... war wohl doch bisschen spät gestern.... Danke ...... ;)

Martin

TThomas
23-01-2002, 09:02
Dies ist mir mittlerweile auch bekannt, allerdings konnte ich keine Lösung finden, die Variable global einzuführen.

Hast du?

tentlewi
23-01-2002, 17:18
Ich habe jetzt ganz schoen lange hin und her experimentiert leider ohne Erfolg.
IIrgendwie ist die Inetraktion von c++ Programmen mit shell scripten eher spärlich bis gar nicht dokumentiert, oder hast Du ein gutes Buch zu dem Thema.
Ich habe z.B. kein brauchbares Beispiel finden koennen wie ich eine
QString Variable mit dem Pfad über einen putenv Aufruf übergeben kann.
Wie übergibt man solch eine Variable aus dem C++ Programm an diese Funktion ???? Ich habe so ziemlich alle möglichen Hochkommata und was es sonst noch gibt ausprobiert...... geht das überhaupt ?? Von diesen Fragen habe ich inzwischen eine ganze Menge, jedoch finde ich nirgendwo eine brauchbare Antwort. Auch die Geschichte mit den Typenkoventionen... ich habe auf der einen Seite einen QString die putenv Funktion ist vom Typ const* char....
wenn Du mir in der Richtung einen Tip anbieten kannst, ich waere Dir sehr dankbar....... vielleicht kann man dann ein kleines Tutorial zu diesem Thema verfassen
so bis denn

Martin

anda_skoa
23-01-2002, 18:31
Wenn du einen char* von einem QString brauchst, hängt es vom Inhalt ab, was du am besten machst.
Wenn der Inhalt ein Pfad in 7bit ASCII ist, also kein unicode oder so, dann geht das mit
QString filename;
char* cFileName = filename.latin1();

Allerdings hab ichschon mehrfach gelesen, dass speziell für Pfade und Dateinamen folgendes empfohlen wird:
char* cFileName = QFile::encodeName(filename);

Ciao,
_