tmpnam, tmpnam_r - einen Namen für eine temporäre Datei erzeugen
Standard-C-Bibliothek (
libc,
-lc)
#include <stdio.h>
char *tmpnam(char *s);
char *tmpnam_r(char *s);
tmpnam_r()
Seit Glibc 2.19:
_DEFAULT_SOURCE
Bis zu einschließlich Glibc 2.19:
_BSD_SOURCE || _SVID_SOURCE
Hinweis: Vermeiden Sie die Verwendung dieser Funktionen; verwenden Sie
stattdessen
mkstemp(3) oder
tmpfile(3).
Die Funktion
tmpnam() gibt einen Zeiger auf eine Zeichenkette
zurück, die ein gültiger Dateiname ist, und sorgt dafür,
dass zu diesem Zeitpunkt keine Datei mit diesem Namen existiert, so dass
ahnungslose Programmierer denken könnten, es sei ein geeigneter Name
für eine temporäre Datei. Falls das Argument
s NULL ist,
wird dieser Name in einem statischen Puffer generiert und könnte von
nächsten
tmpnam()-Aufruf überschrieben werden. Falls
s nicht NULL ist, wird der Name in das Zeichenfeld kopiert (das
mindestens die Länge
L_tmpnam hat), auf das
s zeigt. Im
Erfolgsfall wird
s zurückgegeben.
Der erzeugte Pfadname hat das Pfad-Präfix
P_tmpdir. (Sowohl
L_tmpnam als auch
P_tmpdir sind in
<stdio.h>
definiert, genauso wie das im Folgenden erwähnte
TMP_MAX.
Die Funktion
tmpnam_r() erledigt die gleiche Aufgabe wie
tmpnam(),
liefert aber NULL (um einen Fehler anzuzeigen) zurück, falls
s
NULL ist.
Diese Funktionen geben einen Zeiger auf den eindeutigen temporären
Dateinamen zurück oder NULL, wenn kein eindeutiger Name generiert
werden konnte.
Es sind keine Fehler definiert.
Siehe
attributes(7) für eine Erläuterung der in diesem
Abschnitt verwandten Ausdrücke.
Schnittstelle |
Attribut |
Wert |
tmpnam() |
Multithread-Fähigkeit |
MT-Unsafe race:tmpnam/!s |
tmpnam_r() |
Multithread-Fähigkeit |
MT-Safe |
tmpnam(): SVr4, 4.3BSD, C99, POSIX.1-2001. POSIX.1-2008 kennzeichnet
tmpnam() als veraltet.
tmpnam_r() ist eine nicht standardisierte Erweiterung, die auch auf
einigen anderen Systemen verfügbar ist.
Die Funktion
tmpnam() generiert jedesmal, wenn sie aufgerufen wird, eine
andere Zeichenkette. Dies geschieht bis zu
TMP_MAX Mal. Falls sie
öfter als
TMP_MAX Mal aufgerufen wird, wird ihr Verhalten durch
die Implementierung definiert.
Obwohl diese Funktionen Namen generiert, die schwer zu erahnen sind, ist es
dennoch möglich, dass in der Zeit zwischen der Rückgabe des
Pfadnamens und der Zeit, in der er vom Programm geöffnet wird, ein
anderes Programm einen Pfadnamen mit
open(2) erzeugt oder ihn als
symbolischen Link erstellt. Dies kann zu Sicherheitslücken
führen. Um solche Möglichkeiten zu vermeiden, benutzen Sie den
Schalter
O_EXCL von
open(2), um diesen Pfadnamen zu
öffnen oder besser noch – benutzen Sie
mkstemp(3) oder
tmpfile(3).
Portierbare Anwendungen, die Threads benutzen, können
tmpnam()
nicht mit einem Argument aufrufen, das NULL ist, wenn entweder
_POSIX_THREADS oder
_POSIX_THREAD_SAFE_FUNCTIONS definiert sind.
Benutzen Sie diese Funktionen niemals. Benutzen Sie stattdessen
mkstemp(3) oder
tmpfile(3).
mkstemp(3),
mktemp(3),
tempnam(3),
tmpfile(3)
Die deutsche Übersetzung dieser Handbuchseite wurde von Patrick Rother
<
[email protected]> und Chris Leick <
[email protected]> erstellt.
Diese Übersetzung ist Freie Dokumentation; lesen Sie die
GNU
General Public License Version 3 oder neuer bezüglich der
Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen.
Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken
Sie bitte eine E-Mail an die
Mailingliste
der Übersetzer