Ich mag wiePOSIX Möglichkeiten zur Erzeugung einer temporären Datei mit einem schönen Dateinamen
my-app-Mar27-120357-Qf3K0a.html
eine temporäre Datei mit einem „schönen“ Namen erzeugen, während im Anschluss an der Best Practices für die security.
POSIX bietet mir mkstemp(3)
, die eine Dateinamenvorlage nimmt (in der Regel so etwas wie /tmp/my-app-XXXXXX
), aber es hat zwei Probleme:
- Ich brauche mir das Ausgabeverzeichnis zu wählen. When I see glibc
tempnam(3)
(which is deprecated for a security reason) considers many factors, möchte ich die Bibliothek Funktion wählen lassen. - Es gibt keine Erweiterung im Dateinamen
Der zweite Punkt kann durch mkstemps(3)
adressiert werden, die eine Anzahl von Zeichen nimmt als benutzerdefinierte Erweiterung zu halten. In meinem Fall kann ich my-app-Mar27-120357-XXXXXX.html
und 5
passieren, aber es hat seine eigenen Probleme:
- Ich brauche noch das Ausgabeverzeichnis
- Es ist nicht perfekt tragbar zu wählen. NetBSD scheint es zu vermissen.
So bedenkt, dass ich bin die veraltete tempnam(3)
zu verwenden, um einen Dateinamen mit dem Ausgangsverzeichnispfad zu erzeugen, überschrieben mit X
und ihn an mkstemp(3)
, und benennen Sie die Datei auf meinem bevorzugten Format den Dateinamen Teil. Das Problem liegt also im letzten Schritt, Umbenennen ohne Überschreiben; ist es in POSIX möglich?
Oder könnte es bessere Alternativen geben?
Die Antwort von Alex ist, was ich auch empfehlen würde, aber es gibt eine Standard-C-Funktion ['tmpnam'] (http://en.cppreference.com/w/c/io/tmpnam), die Sie verwenden könnten, wenn Sie Ich möchte wirklich einen Namen. –
@JoachimPileborg 'tmpnam (3)' ist weniger flexibel als 'tempnam (3)' was ich bereits in meinem Beitrag erwähnt habe. – nodakai
[NetBSD 7.0] (http://netbsd.gw.com/cgi-bin/man-cgi?mkstemps++NetBSD-7.0) und neuer haben 'mkstemps'. Allerdings ist es derzeit nicht in Minix3 libc vorhanden. – kdhp