Farid Hajji: Perl - Einführung, Anwendungen, Referenz
2., aktualisierte und erweiterte Auflage
Addison-Wesley Longman, ISBN 3-8273-1535-2
wipe.pl
#!/usr/local/bin/perl -w
# wipe.pl -- Ueberschreibt Dateien vor dem 'physischen' Loeschen.
use Fcntl; # Wegen der O_*-Konstanten
foreach my $file (@ARGV) {
my ($nlink, $size, $blksize);
# Datei zum Schreiben oeffnen.
# Beachte: O_SYNC zum sofortigen Schreiben auf Platte!
unless (sysopen(WIPEIT, $file, O_WRONLY | O_SYNC)) {
warn "can't wipe $file: $!\n";
next;
}
# <- Konkurrenzschlitz -> (Race condition)
# Verzeichniseintrag schon jetzt loeschen!
unless (unlink($file)) {
warn "can't unlink $file: $!\n";
next;
}
# Wir brauchen einige Metadaten...
unless (($nlink, $size, $blksize) = (stat(WIPEIT))[3,7,11]) {
warn "can't stat $file (not wiped): $!\n";
next;
}
# Kurze Warnung, falls weitere echte Links vorhanden sind:
warn "$file has still $nlink names!" if $nlink and $^W;
# Datei physikalisch ueberschreiben
wipe(\*WIPEIT, $size, $blksize);
# Wenn wir der letzte Prozess sind, wird die Datei jetzt geloescht
close(WIPEIT);
}
# wipe() loescht $size Bytes, indem es sie mit \0 ueberschreibt.
# Es wird moeglichst effizient in $blksize Bloecke geschreiben.
sub wipe {
my $fh = shift;
my $size = shift;
my $blksize = shift;
my $buf = "\0" x $blksize; # Ueberschreibpuffer
my ($written, $nbytes);
for($written=0;
$written < $size and
defined($nbytes=syswrite($fh, $buf, $blksize));
$written += $nbytes) { }
}
[Prev] [Up] [Relevant Chapter] [Next]
[Alte Quelle]
| Last modified: $Date: 2006/05/18 12:56:11 $ FH. Search :: Sitemap :: Disclaimer :: Copyright :: Privacy |
|