Temp-Directory
-
Hallo zusammen,
ich suche den Befehl, der mir das aktuelle Temp-Verzeichnis des Betriebsystems liefert. Unter Windows ist das "GetTempPath()", doch finde ich nichts vergleichbares für Linux. Ich möchte das ganze so variabel wie möglich, also schreibt bitte nicht "/tmp/".
Danke
-
Normalerweise prüft man zuerst, ob $TMPDIR oä definiert ist und verwendet /tmp falls nicht.
-
wie kann ich denn prüfen, ob "$TMPDIR oä definiert ist"?
ich definiere das tmp-verzeichnis nicht.
-
Mit man: getenv.
-
Also wenn getenv( "TMPDIR" ) == NULL ist das StandardTempVerzeichnis "/tmp/" und wenn getenv( "TMPDIR" ) != NULL wurde das TempVerzeichnis geändert?
-
dann ist der Rückgabewert das Temp-Verzeichnis
-
MERCY!!!
Noch ne kleine Frage:
Ich würde gerne ein Verzeichnis in dem TempVerzeichnis anlegen das es 100% noch nicht gibt. Geht das und wie?
-
Ich bin mir nicht ganz sicher, ob es das richtige Verzeichnis íst, aber schau dir mal man: tmpnam() an.
-
Unter BSD und GNU/Linux gibt es dafür man: mkdtemp, wenn Du lieber richtig portabel bleiben möchtest, kannst Du natürlich auch einfach man: mktemp(3) verwenden.
-
Danke.
Doch leider liefert mir der Aufruf "char *tmp = mkdtemp( "/tmp/TestXXXX" );" immer NULL.
Kann es an den Rechten liegen? Meine Programm läuft als Plugin in einer weiteren Applikation.
-
Das kann daran liegen dass die Funktion sechs Platzhalter erwartet, und nicht nur vier
-
MHHHH, nö. Auch dann ist das Ergebnis immer noch NULL. *SORRY*
-
hmm, alles außer man: tmpfile(3) ist eh potentiell unsicher! (siehe auch BUGS-Beschreibung in den Manpages)
-
Das Problem dabei ist, die Applikation in der mein Programm läuft erstellt die Dateien. Damit diese nicht wild im TempVerzeichnis rumliegen will ich wenigstens ein wenig Struktur durch Ordner reinbringen. Dabei benötige ich allerdings Funktionen, die mir wirklich nur Ordner anlegen. Keine Files in Ordnern.
-
Hallo,
wenn du dir mal die ManPages zu mkdtemp ansiehst, findest du eine weitere Bedingung für den Aufruf der Funktion:
DESCRIPTION The mkdtemp() function generates a uniquely-named temporary directory from template. The last six characters of template must be XXXXXX and these are replaced with a string that makes the directory name unique. The directory is then created with permissions 0700. [b]Since it will be modified, template must not be a string [/b] [b]constant, but should be declared as a character array. [/b]
Hier nach darfst du die Funktion nicht mit einem konstanten String aufrufen.
char *tmp = mkdtemp( "/tmp/TestXXXX" );
Sondern müsstest etwas in der folgenden Art versuchen: (ich habe den Code nicht getestet):
char tmp[1024]; sprintf(tmp, "/tmp/TestXXXXXX"); mkdtemp(tmp); ...
Eventuelle Fehlercodes habe ich nun nicht abgefangen, müssten also noch nachgetragen werden.
Das Resultat steht dann in tmp, wenn ich mich nicht irre.Gruß mcr
-
DANKE
Wer lesen kann ist klar im Vorteil. Jetzt läuft alles. Jetzt will ich das Verzeichnis nur noch löschen (auch wenn noch Dateien enthalten sind). Dann habt ihr einen User rund um glücklich gemacht.