Das Absichern von Textdateien II

 [Vorheriges Kapitel]  [Vorherige Seite]  [Inhaltsverzeichnis]  [Nächste Seite]  [Nächstes Kapitel]

Books.pm
sub save {
   my ($self) = @_;
   return 1 if $self->{changes} == 0;
   my $tmpfile = $self->{dbfile} . ".TMP";
   my $out = new IO::File $tmpfile, O_WRONLY|O_CREAT|O_TRUNC
      or croak "Unable to create $tmpfile: $!";
   while (my($key, $record) = each(%{$self->{records}})) {
      my $line = record_to_line($record);
      print $out $line, "\n"
         or croak "Write error on $tmpfile: $!";
   }
   $out->flush or croak "Write error on $tmpfile: $!";
   $out->fsync or croak "Fsync failed on $tmpfile: $!";
   $out->close or croak "Close failed on $tmpfile: $!";
   rename($tmpfile, $self->{dbfile}) or
      croak "Rename operation failed for $tmpfile: $!";
   $self->{changes} = 0;
   return 1;
}

sub DESTROY {
   my ($self) = @_;
   $self->save();
}

*O_WRONLY|O_CREAT|O_TRUNC bedeutet: Nur zum Schreiben eröffnen, die Datei kreieren, falls noch nicht vorhanden, und die Datei auf Länge 0 bringen, falls vorhanden. Diese Konstantennamen werden durch Fcntl exportiert.
 

 [Vorheriges Kapitel]  [Vorherige Seite]  [Inhaltsverzeichnis]  [Nächste Seite]  [Nächstes Kapitel]
Copyright © 1996 - 2003 Andreas Borchert, in HTML konvertiert am 01.10.2003