Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

tempnam - Pfadnamen für temporäre Datei erzeugen

&pagelevel(4)&pagelevel

Definition

#include <stdio.h>

char *tempnam(const char *dir, const char *pfx);

Beschreibung

tempnam() erzeugt einen Pfadnamen, der für eine temporäre Datei genutzt werden kann.

tempnam() ermöglicht die Steuerung der Dateiverzeichniswahl.

dir zeigt auf den Namen des Dateiverzeichnisses, in dem die Datei erstellt werden soll. Wenn die Umgebungsvariable TMPDIR gesetzt ist, wird das dort angegebene Dateiverzeichnis verwendet, sonst das unter *dir genannte. Wenn dir der Nullzeiger ist und das Dateiverzeichnis {P_tmpdir} kein zugreifbares Dateiverzeichnis bezeichnet, werden die Dateinamen mit dem Verzeichnisnamen /tmp erzeugt. Falls auch dieser nicht zugreifbar ist, wird 0 zurückgegeben.

In stdio.h ist P_tmpdir mit "/var/tmp" als das Dateiverzeichnis definiert, in dem die temporäre Datei angelegt wird.

Bei vielen Anwendungen ist es vorteilhaft, wenn die temporären Dateien bestimmte bevorzugte Anfangsbuchstaben in ihren Namen aufweisen. Hierfür verwendet man das Argument pfx. Dieses Argument kann ein Nullzeiger sein oder auf eine Zeichenkette von maximal fünf Bytes zeigen, die als die ersten Bytes des Namens der temporären Datei eingesetzt werden.

Der von tempnam() erzeugte Namensteil besteht aus zwei Teilen: Der erste Teil besteht aus drei Großbuchstaben (AAA, BAA, ..., ZAA, ZBA, ..., ZZZ). Der zweite Teil besteht aus einem Buchstaben und den fünf letzten Zeichen der Prozessnummer. Falls die Prozessnummer aus weniger als fünf Zeichen besteht, wird sie mit führenden Nullen zu fünf Zeichen ergänzt. Ingesamt ergibt sich also zum Beispiel: /var/tmp/AAAa00123.

tempnam() verwendet malloc(), um Speicherplatz für den erzeugten Dateinamen zu erhalten, und gibt einen Zeiger auf diesen Bereich zurück. Daher kann jeder von tempnam() zurückgegebene Zeigerwert als Argument für free() dienen (siehe malloc()). Wenn tempnam() aus irgendeinem Grunde das erwartete Ergebnis nicht liefern kann, d.h., wenn malloc() erfolglos war oder kein geeignetes Dateiverzeichnis gefunden wurde, wird ein Nullzeiger zurückgegeben.

tempnam() ist erfolglos, wenn nicht genug Speicherplatz vorhanden ist.

Returnwert

Zeiger auf eine Zeichenkette, die den generierten Pfadnamen enthält,



bei Erfolg.


Nullzeiger

bei Fehler. errno wird gesetzt, um den Fehler anzuzeigen.


Nullzeiger

wenn /tmp nicht zugreifbar ist. errno bleibt unverändert.

Fehler

tempnam() schlägt fehl, wenn gilt:

 

ENOMEM

Es ist nicht genügend Speicherplatz für den neuen Pfadnamen vorhanden.

 

Erweiterung


 

EINVAL

tempnam() wird nicht in POSIX-Umgebung aufgerufen, d.h. die Variable PROGRAM-ENVIRONMENT ist nicht auf SHELL gesetzt. (Ende)

Hinweise

tempnam() wird nur für POSIX-Dateien ausgeführt.

tempnam() generiert bei jedem Aufruf einen anderen Pfadnamen.

Dateien, die mit tempnam() und entweder von fopen() oder creat() erstellt wurden, sind nur insofern temporär, weil sie sich in einem Dateiverzeichnis befinden, das für temporären Gebrauch bestimmt ist, und weil ihre Namen eindeutig sind. Der Benutzer ist dafür verantwortlich, die Datei zu löschen, wenn diese nicht mehr gebraucht wird. Wenn diese Funktion mehr als {TMP_MAX}-mal (definiert in stdio.h) in einem einzigen Prozess aufgerufen wird, werden vorher benutzte Namen wieder verwendet.

Es ist möglich, dass während des Zeitraums von der Erstellung eines Pfadnamens bis zum Öffnen der Datei ein anderer Prozess eine Datei mit dem gleichen Namen erstellt. Dies kann jedoch nicht eintreten, wenn der andere Prozess tempnam() oder mktemp() verwendet und der Pfadname so gewählt wird, dass seine Duplizierung auf andere Weise unwahrscheinlich ist.

Siehe auch

fopen(), free(), open(), tmpfile(), tmpnam(), unlink(), stdio.h.