Am Donnerstag, dem 21. März 2002 um 13:35:27, schrieb Reinhard Foerster:
Ja. Wie einfach das ist hängt natürlich davon ab, wie vorhersagbar die generierten Dateinamen auf dem jeweiligen System sind.
Die glibc versucht das angeblich zu erschweren, aber unvorhersagbar werden sie sicher nicht:
$ cat tmpnam.cc; ./tmpnam #include <iostream> #include <cstdio> int main() { for(int i = 0; i < 20; i++) std::cout << tmpnam(0) << '\n'; return 0; }
/tmp/filerTUToi /tmp/fileqz2hTs /tmp/fileNn28nD /tmp/file8MteUN /tmp/filedYXErY /tmp/fileAieoS8 /tmp/filejOepkj /tmp/fileCORsNt /tmp/filebDyl7D /tmp/fileCfDGiO /tmp/filer6IjvY /tmp/fileqQUcJ8 /tmp/fileX3upYi /tmp/fileidgZ6s /tmp/file9K5AgD /tmp/filewJ2vrN /tmp/filen1dFuX /tmp/fileSVC8y7 /tmp/fileP8xDEh /tmp/fileCCCfKr
/dev/random wird definitiv nicht geöffnet.
Wozu stat? tmpnam sagt dir, das es das gelieferte File irgendwann mal nicht gab. stat sagt dir nochmal das gleiche für einen etwas späteren aber auch lange vergangenen Zeitpunkt. Wenn stat kein File sieht, hast du keinen neuen Infos.
Da hast du natürlich recht, stat dient wahrscheinlich nur dem Zweck, nicht temporäre Dateien nicht versehentlich zu überschreiben und wird nur 'aus Versehen' auch bei temporären Dateien aufgerufen.
Danke für die ganzen Links. Ich hatte nach tmpnam gesucht und wenig detaillierte Infos gefunden.
Du schreibst, daß eine Änderung ein Menge Arbeit bedeuten würde. Warum eigentlich?
Weil nicht nur das aktuelle Paket, sondern auch das potato-Paket gefixt und für alle Plattformen neu übersetzt werden muss. Naja, ich werde mich dem Schicksal fügen. ;-) Umstricken auf tmpfile sollte genügen.
Torsten