BEZEICHNUNG¶
mkstemp, mkostemp, mkstemps, mkostemps - eine einzigartige temporäre Datei
erstellen
ÜBERSICHT¶
#include <stdlib.h>
int mkstemp(char *schablone);
int mkostemp(char *schablone, int schalter);
int mkstemps(char *schablone, int endungslaenge);
int mkostemps(char *schablone, int endungslaenge, int schalter);
Mit Glibc erforderliche Makros (siehe
feature_test_macros(7)):
mkstemp():
_BSD_SOURCE || _SVID_SOURCE ||
_XOPEN_SOURCE >= 500 ||
_XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
|| /* Seit Glibc 2.12: */ _POSIX_C_SOURCE >= 200112L
mkostemp(): _GNU_SOURCE
mkstemps(): _BSD_SOURCE || _SVID_SOURCE
mkostemps(): _GNU_SOURCE
BESCHREIBUNG¶
Die Funktion
mkstemp() erstellt einen eindeutigen temporären
Dateinamen aus
schablone, erstellt und öffnet die Datei und gibt
einen Deskriptor für für die offene Datei zurück.
Die letzten sechs Zeichen von
schablone müssen »XXXXXX«
sein. Diese werden durch eine Zeichenkette ersetzt, die den Dateinamen
eindeutig macht. Da sie verändert wird, darf
schablone keine
Zeichenkettenkonstante sein, sondern als Zeichenfeld deklariert werden.
Diese Datei wird mit den Rechten 0600 erstellt, das heißt, nur der Besitzer
darf sie lesen und schreiben. (In den Glibc-Versionen bis einschließlich
2.06 wurde die Datei mit den Rechten 0666 erstellt, das heißt, alle
Benutzer dürfen sie lesen und schreiben.) Der zurückgegebene
Dateideskriptor ist zum Lesen und Schreiben geöffnet. Die Datei wird mit
open(2) und dem Schalter
O_EXCL geöffnet, was
gewährleistet, dass die Datei vom aufrufenden Prozess erzeugt wurde.
Die Funktion
mkostemp() unterscheidet sich von
mkstemp() nur
dadurch, dass mit
schalter zusätzliche Schalter, die
open(2) betreffen, angeben werden können (z.B.
O_APPEND,
O_SYNC).
Die Funktion
mkstemps() unterscheidet sich von
mkstemp() nur
dadurch, dass die Zeichenkette in
schablone eine Endung von
endungslaenge Zeichen enthält. Daher hat
schablone die Form
praefixXXXXXXendung und die Zeichenkette XXXXXX wird wie für
mkstemp() verändert.
Die Funktion
mkostemp() verhält sich zu
mkstemps() wie
mkostemp() zu
mkstemp().
RÜCKGABEWERT¶
Bei Erfolg geben diese Funktionen den Dateideskriptor der temporären Datei
zurück. Im Fehlerfall wird -1 zurückgegeben und
errno
entsprechend gesetzt.
FEHLER¶
- EEXIST
- Es konnte kein eindeutiger temporärer Dateiname
erstellt werden. Der Inhalt von schablone ist nun undefiniert.
- EINVAL
- Für mkstemp() und mkostemp(): Die
letzten sechs Buchstaben von schablone waren nicht
XXXXXX;schablone ist unverändert.
Für mkstemps() und mkostemps(): schablone ist
weniger als (6 + endungslaenge) Zeichen lang oder die
letzten 6 Zeichen vor der Endung in schablone waren nicht
XXXXXX.
Diese Funktionen könnten auch mit einem der für
open(2)
beschriebenen Fehler fehlschlagen.
VERSIONEN¶
mkostemp() ist seit Glibc 2.7 verfügbar.
mkstemps() und
mkostemps() sind seit Glibc 2.11 verfügbar.
mkstemp(): 4.3BSD, POSIX.1-2001.
mkstemps(): nicht standardisiert, erscheint aber auf mehreren anderen
Systemen
mkostemp() und
mkostemps() sind Glibc-Erweiterungen.
ANMERKUNGEN¶
Das frühere Verhalten, eine Datei mit den Zugriffsrechten 0666 zu
erstellen, könnte ein Sicherheitsrisiko darstellen, besonders seit andere
UNIX-Varianten 0600 benutzen und jemand diese Einzelheit bei der Portierung
von Programmen übersehen könnte.
Allgemeiner ausgedrückt, sagt die POSIX-Spezifikation von
mkstemp()
nichts über die Dateimodi, daher sollte die Anwendung sicherstellen, dass
ihre Dateimodus-Erstellungsmaske (siehe
umask(2)) vor dem Aufruf von
mkstemp() (und
mkostemp()) entsprechend gesetzt ist.
Der Prototyp von
mktemp() befindet sich für Libc4, Libc5 und Glibc1
in
<unistd.h>. Glibc2 berücksichtigt POSIX.1 und hat den
Prototyp in
<stdlib.h>.
SIEHE AUCH¶
mkdtemp(3),
mktemp(3),
tempnam(3),
tmpfile(3),
tmpnam(3)
KOLOPHON¶
Diese Seite ist Teil der Veröffentlichung 3.42 des Projekts Linux-
man-pages. Eine Beschreibung des Projekts und Informationen, wie Fehler
gemeldet werden können, finden sich unter
http://www.kernel.org/doc/man-pages/.
ÜBERSETZUNG¶
Die deutsche Übersetzung dieser Handbuchseite wurde von Andreas D. Preissig
<andreas@sanix.ruhr.de> und Chris Leick <c.leick@vollbio.de>
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 <debian-l10n-german@lists.debian.org>.