* Jan Trippler schrieb am 19.Jul.2001:
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
Richtig, daß meiste träte doch schon bei den ersten Versuchen auf, und der Programmierer programierte es einfach um, vergäbe Recht usw. Nur das mit der Disk voll kann man nicht richtig überprüfen. Selbst wenn man die Disk künstlich randvoll macht, weiß man nicht ob es genau zu einem bestimmten Zeitpunkt vollläuft. Trotzdem kann es sein, daß auch später mal die Rechte nicht stimmen oder so.
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. 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.
Dann schlage ich sowas wie
${prg}.`date +%s`.$$.tmp vor. Da gibt es so schnell keine doppelte, es sei denn es werden im Prozeß selber mehere tmp angelegt. Die kann ich dann aber hart anders nennen, etwa:
$TMP1=$TMPDIR/$PRG.A`date +%s`.$$.tmp $TMP2=$TMPDIR/$PRG.B`date +%s`.$$.tmp $TMP3=$TMPDIR/$PRG.C`date +%s`.$$.tmp
Sollte man in einer Schleife Tempdateien anlegen (könnte ja sein, daß man das braucht. ;)) dann wird der Schleifenzähler mit im Namen aufgeführt.
Ack.
Das ist genauso unsicher wie eine von mktemp erzeugte Version (in die man per Vorlage ja auch $$ und $prg einfließen lassen kann).
Nun, wie soll zur gleichen Sekunde die gleiche PID meines Skripts nochmal verwendet werden? Außer mein Skript macht es selber, aber dazu habe ich ja schon was geschrieben. Nun ja, vielleicht wenn die Uhr mal total falsch geht, oder wenn die Prozeßtabelle fast voll ist, aber dann ist das System sowieso schon hinüber.
Man kann sich nie 100% sicher sein, dass das Anlegen der temp. Datei klappt und muss in jedem Fall einen potenziellen Fehler abfangen.
ACK Bernd -- Welches Buch ist zu empfehlen? Schon mal bei SuSE vorbeigesehen? http://www.suse.de/de/produkte/buecher/index.html oder die Empfehlungen der SuSE-Entwickler auf dem eigenen Rechner? file:///usr/shar/doc/sdb/de/html/literatur.html |Zufallssignatur 5