User since
2005-04-28
155
Artikel
BenutzerIn
Hi!
Mein Skript öffnet mit opendir() ein Verzeichnisse um den Inhalt dessen auszulesen.
Gibt es eine Methode um das geöffnete Verzeichnis zu sperren, damit zu dem Zeitpunkt keine Daten dazu kommen bzw. gelöscht werden können?
Ich weiss, dass flock() Dateien sperren kann, aber geht das auch mit Verzeichnissen? Wenn ja, wie?
Ebenfalls habe ich bereits die PerlDoc zu flock() gelesen aber für mich ist das ganze etwas zu fachspezifisch was diese FLAGS angeht; wann braucht man welchen von diesen (LOCK_SH, LOCK_EX, LOCK_UN, LOCK_NB)?
MfG
BratHering
User since
2003-08-04
12208
Artikel
Admin1
du könntest ein lockfile im betreffenden verzeichnis locken. verzeichnisse locken geht
glaube ich nicht...
User since
2005-04-28
155
Artikel
BenutzerIn
Also d.h. wenn ich eine datei locke, dann ist das Verzeichnis auch gelockt?
Und noch ne frage: Dateien öffne ich einmal zum Lesen und einmal zum Schreiben, welches dieser Flags hat welche Bedeutung dazu (LOCK_SH, LOCK_EX, LOCK_UN, LOCK_NB)?\n\n
<!--EDIT|BratHering|1132597489-->
User since
2005-01-17
14748
Artikel
Admin1
Nein, das Verzeichnis ist nicht gelockt.
Schau bitte einmal in die Perldoku
perldoc perlopentut unter file locking.\n\n
<!--EDIT|GwenDragon|1132599476-->
User since
2003-08-04
93
Artikel
BenutzerIn
wenn du das locking nicht unbedingt auf system-ebene brauchst dann erstell dir doch einfach ein semaphorfile und schau nach ob es existiert bevor du irgendwelche änderungen vom script aus zulässt.
Live long and prosper!
42;
User since
2003-08-04
12208
Artikel
Admin1
[quote=BratHering,21.11.2005, 19:24]Und noch ne frage: Dateien öffne ich einmal zum Lesen und einmal zum Schreiben[/quote]
dann kannst du dir vermutlich das gesamte locking sparen, weil dir zwischendurch jeder reinpfuschen kann.
lies mal den wikieintrag
Wie spere ich eine Datei?
User since
2005-04-28
155
Artikel
BenutzerIn
Okay, vielen dank für die Info. Inzwischen habe ich das hier heraus gegoogled:
http://groups.google.de/group....9b77713
...und scheinbar kann man wirklich keine DirHandles sperren.
Aber wenn man eine Datei sperrt, dann kann man doch das Verzeichnis selber nicht löschen in dem die Datei liegt, solange diese gesperrt ist, oder?
User since
2003-11-28
3645
Artikel
ModeratorIn
Bei Unix ist es so, dass eine Datei unwiderruflich verschwindet, wenn der letzte Link auf sie verschwindet. Solange du dann noch einen FileHandle offen hast, existiert die Datei (irgendwie), aber mit dem close() ist sie weg.
Kleine Demonstration:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
open(X, ">/tmp/bla") or die $!;
print X "hallo";
close X;
system("ls -al /tmp/bla");
open(X, "</tmp/bla") or die $!;
unlink "/tmp/bla";
system("ls -al /tmp/bla");
while(<X>) {
print STDERR $_, "\n";
}
seek X, 0, 0;
while(<X>) {
print STDERR $_, "\n";
}
close X;
User since
2003-08-04
7321
Artikel
ModeratorIn
funzt aber (leider) wirklich nur unter unix und co.
User since
2005-02-18
357
Artikel
BenutzerIn
Win32 z. B. weigert sich die offene Datei zu löschen
unlink "/tmp/bla" or warn $!;
QuotePermission denied at D:\temp\fweg.pl line 10.
I sense a soul in search of answers.