On Don, 19 Jul 2001, Jan Trippler wrote:
On Mit, 18 Jul 2001 at 23:34 (+0200), David Haller wrote:
On Mit, 18 Jul 2001, Bernd Brodesser wrote:
* David Haller schrieb am 18.Jul.2001: [...]
$ mktemp /root/${prg}.$$.XXXXXX Cannot create temp file /root/.12760.YTRUBd
Ich mache meine Fehlermeldung lieber selber. Was soll der Endanwender mit obiger Meldung anfangen?
Du weisst ja auch nix genaues (Rechte, Disk voll, uebergeordnetes Verz. existiert nicht)... Du weisst du dass es nicht geklappt hat (mkstemp liefert nur 1 als exit-status).
Naja, so viele Fälle gibt es ja wohl nicht und es ist für den Anwender nicht primär entscheidend zu wissen, was denn nun genau schief gelaufen ist (wenn er Ahnung hat, kann er mittels df, ls und so weiter selbst auf Fehlersuche gehen, wenn nicht, dann nützen ihm genauere Meldungen auch nichts). Wichtig ist vorrangig, zu entscheiden ob das Programm weitermachen kann.
Hmja, _mich_ wuerde es auch als Anwender interessieren, ob's z.B. an den Permissions oder am Plattenplatz lag... (EPERM/ENOSPC)...
Das kann man einfach so klären, dass in einer Schleife n-mal versucht wird, eine temp. Datei anzulegen und dann erst aufgegeben wird (wobei n nicht zu hoch sein sollte - vielleicht 5 - 10). Wenn man es ganz sauber macht, dann prüft man im Fehlerfall ein paar Sachen ab (habe ich Schreibrechte im Verzeichnis, ist das FS voll?), in denen ein nochmaliges Probieren sinnlos wäre und versucht es dann einfach ein paar Mal. So kann man evtl. Namensgleichheiten abfangen.
ACK.
[...]
Wichtig ist doch, daß mktemp überprüft, ob der vorgeschlagene Dateiname schon existiert oder nicht. Wenn es das nicht tut, dann ist es nicht zu gebrauchen.
Tut es. Es scheitert dann (bzw. mkstemp(3) scheitert und gibt in errno EEXIST ("File exists" bzw. "Die Datei existiert bereits") zurueck. Leider gibt die gepatchte Version von mktemp diese Fehler- ursachen weder aus noch weiter (z.B. mittels 'exit(errno);')...
Es ist schade, dass der Patch das tut. Kennst du einen Grund dafür?
Nein. Ich bin auch erst im Zusammenhang mit diesem Thread darueber gestolpert... Was mich ein wenig wundert, ist, dass der patch evtl. von DJB ist... --- mktemp-1.4/Makefile.djb Tue Sep 16 14:59:57 1997 +++ mktemp-1.4/Makefile Tue Sep 16 15:04:56 1997 Oder ist das (in diesem Fall in dieser Hinsicht bessere) Original von DJB? Hm. Glaub's fast... Ich bezieh mich hier auf den mktemp-1.5-linux.patch der beim mktemp-1.5 von kernel.org im src.rpm steckt... Und scheinbar ist auch in meinem mktemp der SuSE 6.2: '$ rpm -qf `which mktemp`\nmktemp-1.4-66' der oder ein aehnlicher patch drin... Jedenfalls gibt mein mktemp hier kein "Permission denied" aus (wie das Original via err() aus err.h).
Das ist genauso unsicher wie eine von mktemp erzeugte Version (in die man per Vorlage ja auch $$ und $prg einfließen lassen kann).
Ja, stimmt, tempfile="`mktemp ${prg}-\`date "+%s"\`-$$.XXXXXX`" duerfte das beste sein ;) Siehe aber auch meine Antwort zu Bernds mail...
Man kann sich nie 100% sicher sein, dass das Anlegen der temp. Datei klappt und muss in jedem Fall einen potenziellen Fehler abfangen.
Ja. Das ist "vorgefertigt" glaub nicht zu haben. Und IMO waere da eine Rueckgabe von errno (via exit(errno) aus mktemp) ganz praktisch. -dnh -- 8: Globale Variable Der Aktienkurs von Netscape. (Kristian Köhntopp)