Thread Sicheres Löschen (25 answers)
Opened by bianca at 2013-04-07 09:48

bianca
 2013-04-07 09:48
#166921 #166921
User since
2009-09-13
6978 Artikel
BenutzerIn

user image
Hi!
Habe hier ein klitzekleines Problemchen mit Dateiumgang.
Folgendes Testscript:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/usr/bin/perl -w
use strict;
use warnings;
use Fcntl qw (:DEFAULT :flock);

my $datei = '/meinpfad/test.dat';

my $err;
sysopen(my $fh,$datei,O_RDONLY) or $err = $!;
if (!defined $err) {
    my $flock = flock($fh,LOCK_EX|LOCK_NB);
    if ($flock) {
print "Geht los\n";
        my $ul = unlink($datei);
print "unlink: $ul - >$!<\n";
    }
    else {
print "Anderweitig gesperrt\n";
    }
}


Nun verhält sich das obige Script wie folgt:
Auf Windows 7 mit Strawberry 5.10.1:
Quote
Geht los
unlink: 0 - >Permission denied<


Auf einem Linux Server mit v5.10.1 (*) built for x86_64-linux-gnu-thread-multi:
Quote
Geht los
unlink: 1 - >Inappropriate ioctl for device<


Was will ich damit sagen? Ich suche eine Möglichkeit, eine Datei nur dann zu löschen, wenn sie 1. leer, also -z ist und 2. garantiert von keinem anderen Prozess im Zugriff ist.
Das Beispielscript zeigt, dass das unlink auf Windows erkennt, dass noch ein Zugriff erfolgt und löscht nicht. Auf dem Linux hingegen grätscht das unlink anscheinend in jeglichen Zugriff hinein und löscht gnadenlos. Zwar wird $! gesetzt aber das nützt mir nach dem unlink ja nichts mehr.

Frage 1: Verhält sich das bei euch auch so oder ist das eine Besonderheit des hier getesteten Linux Servers?
Frage 2: Habe ich eine Chance, auf Linux ein "sicheres" Löschen zu verwirklichen?
Danke
10 print "Hallo"
20 goto 10

View full thread Sicheres Löschen