Thread open-Anweisung (22 answers)
Opened by geloescht at 2012-06-24 00:30

FIFO
 2012-06-24 21:55
#159338 #159338
User since
2005-06-01
469 Artikel
BenutzerIn

user image
2012-06-24T19:28:20 ?
Wenn hier in der ersten Zeile (open) ein "or die" hinkäme, was würde es bewirken, bzw. ab wann würde das "or die" zum Tragen kommen.


Es ist immer sinnvoll, das Ergebnis eines open()-Aufrufs zu verwerten. Was man im Fehlerfall macht, ist einem aber selbst überlassen.
Oft ist ein gescheitertes open() so gravierend, dass die Fortsetzung des Programms nicht sinnvoll ist. Deshalb ist der "Standard-Reflex" beim Scheitern ein die().
Du kannst aber auch z.B. mehrere Versuche zulassen, oder mit warn() nur warnen (statt töten). Hier mal ein Beispiel (zur Verdeutlichung, nicht unbedingt als produktiver Code)

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
my $success = 0;
my $tries   = 0;

while ($success = open(FILECOUNTER, "+<coresys/counter.csv")) {
    last if $success       # open hat funktioniert
         or ++$tries > 5;  # mehr als 5 Versuche
    sleep(1);              # warte etwas
}

if ($success) {
    flock(FILECOUNTER, LOCK_EX);
    my $oldcounter = <FILECOUNTER>;
    my $newcounter = $oldcounter+1;
    # etc.
}
else {
    # gib eine Warnung aus, oder mach was anderes
}


edit Wie rosti gerade richtig schreibt, solltest Du natürlich auch die Rückgabewerte von flock() und close() verwerten
Last edited: 2012-06-24 21:59:20 +0200 (CEST)
Everyone knows that debugging is twice as hard as writing a program in the first place. So if you're as clever as you can be when you write it, how will you ever debug it? -- Brian Kernighan: "The Elements of Programming Style"

View full thread open-Anweisung