Schrift
[thread]6392[/thread]

flock: Fehlermeldung präzisieren lassen?



<< |< 1 2 3 >| >> 27 Einträge, 3 Seiten
jemand
 2004-07-11 16:56
#84164 #84164
User since
2004-05-14
231 Artikel
BenutzerIn
[default_avatar]
hi,
ich hab ein problem denn in meinem nicht grad kleinen Skript kommt die meldung 'This file cannot be accessed because it's used by another process'
das file wird nur von diesem Skript bei einem aufruf benutzt
also wird wohl der server zu schnell sein und schon wieder open machen bevor das andere mal closed gemacht wurde
wie kann ich einbauen dass ich weiß an welcher stelle das skript nicht öffnen kann?
ich muss ja wissen wo ich das set-timeout hinmachen muss
print uc 'i',chr(29*4).q+'s +.++($_=q-m-),++$_;
print chr for 116,$_[0],97,$_[0],98;
print 'ug,',chr(), scalar reverse qq?!erutaef a s'ti?;
pq
 2004-07-11 17:15
#84165 #84165
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
Code: (dl )
1
2
3
4
5
6
use Fcntl qw(:flock);
...
open FH, ...
flock FH, LOCK_EX; # zum schreiben geöffnete dateien
# oder
flock FH, LOCK_SH; # zum lesen geöffnete dateien
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
Gast Gast
 2004-07-11 17:43
#84166 #84166
[quote=pq,11.07.2004, 15:15]
Code: (dl )
1
2
3
4
5
6
use Fcntl qw(:flock);
...
open FH, ...
flock FH, LOCK_EX; # zum schreiben geöffnete dateien
# oder
flock FH, LOCK_SH; # zum lesen geöffnete dateien
[/quote]
Was mich immer schon interessiert hat ...
was ist der Unterschied zwischen
flock FH, x;
und
use Fcntl qw(:flock);
flock FH, LOCK_xx;
format_c
 2004-07-11 17:46
#84167 #84167
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
dass, man mit Dem Modul und der improtiereten Symboltabelle flock Konstanten in den Namensraum importiert die man sich leichter merken kann als 1,2,8,4

Gruß Alex
Gast Gast
 2004-07-11 18:08
#84168 #84168
[quote=format_c,11.07.2004, 15:46]dass, man mit Dem Modul und der improtiereten Symboltabelle flock Konstanten in den Namensraum importiert die man sich leichter merken kann als 1,2,8,4

Gruß Alex[/quote]
Danke :) für die Klarstellung.
aber wenn dass der einzige Grund ist das Modul einzubinden, dann bleibe ich doch lieber bei 1,2,8,4 und spare dabei ein wenig Zeit und Speicher.

Oder ist da sonst noch etwas zu berücksichtigen?
jemand
 2004-07-11 18:09
#84169 #84169
User since
2004-05-14
231 Artikel
BenutzerIn
[default_avatar]
flock einzubauen hab ich schon kapiert aber eigentlich woltte ich wissen, wie ich dass machen muss, dass ich weiß wo(bei welchem open) die datei nicht geöffnet werden kann wenn da ne fehlermeldung ist
ps ich benutze parameter 2 immer macht das was?\n\n

<!--EDIT|jemand|1089555074-->
print uc 'i',chr(29*4).q+'s +.++($_=q-m-),++$_;
print chr for 116,$_[0],97,$_[0],98;
print 'ug,',chr(), scalar reverse qq?!erutaef a s'ti?;
Gast Gast
 2004-07-11 18:18
#84170 #84170
[quote=jemand,11.07.2004, 16:09]flock einzubauen hab ich schon kapiert aber eigentlich woltte ich wissen, wie ich dass machen muss, dass ich weiß wo(bei welchem open) die datei nicht geöffnet werden kann wenn da ne fehlermeldung ist
ps ich benutze parameter 2 immer macht das was?[/quote]
Bau einen Loop ein ...
Code: (dl )
1
2
3
4
5
6
sub tu_was {
   my $arg = @_;
   ...
   tu_was($arg) unless flock FH, 2;
   ...
}


aber pass auf dass keine Endlos-Schleife entsteht.

Edit:
Du kannst sowas auch als 'Quasi-Semaphore' aufbauen indem Du eine Dummy-Datei erstellst und vor jedem Zugriff auf Verzeichnisse oder Dateien, ganz schlicht die Dummy-Datei mit einem flock() versiehst.\n\n

<!--EDIT|Dieter|1089556138-->
jemand
 2004-07-11 18:33
#84171 #84171
User since
2004-05-14
231 Artikel
BenutzerIn
[default_avatar]
hätte nicht vielleicht jemand den text am anfang meines beitrags lesen können
ich weiß dass ich irgendwo sowas einbauen muss oder auch ein sleep aber ich weiß nicht wo deswegen will ich ja die fehlermeldung so erweitern dass ich weiß bei welchem open das passiert
oder soll ich einfach mal probieren(was bei 2000zeilen nicht so einfach sein wird)
print uc 'i',chr(29*4).q+'s +.++($_=q-m-),++$_;
print chr for 116,$_[0],97,$_[0],98;
print 'ug,',chr(), scalar reverse qq?!erutaef a s'ti?;
Gast Gast
 2004-07-11 18:43
#84172 #84172
[quote=jemand,11.07.2004, 16:33]hätte nicht vielleicht jemand den text am anfang meines beitrags lesen können
ich weiß dass ich irgendwo sowas einbauen muss oder auch ein sleep aber ich weiß nicht wo deswegen will ich ja die fehlermeldung so erweitern dass ich weiß bei welchem open das passiert
oder soll ich einfach mal probieren(was bei 2000zeilen nicht so einfach sein wird)[/quote]
Im Grunde genommen wird jeder LOCK nach einem schließen der Datei wieder gelöscht.
Wenn Du da Probleme hast dann scheint es so als würden mehrere Instanzen Deines Scripts (oder andere Scripte?) gleichzeitig auf eine gesperrte Datei zugreifen wollen.

Wie gesagt ....
sowas läßt sich durch den vorgenannten Loop oder durch die vorgenannte Verzeichnissperre lösen - probiers mal.

Edit:
Wenn Du wissen willst bei welchem OPEN das passiert, dann bleibt Dir nichts anderes übrig als in jede Subroutine die sich mit OPEN beschäftigt, eine aussagekräftige Fehlermeldung einzubauen.\n\n

<!--EDIT|Dieter|1089557630-->
pq
 2004-07-11 18:46
#84173 #84173
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=Dieter,11.07.2004, 16:08]aber wenn dass der einzige Grund ist das Modul einzubinden, dann bleibe ich doch lieber bei 1,2,8,4 und spare dabei ein wenig Zeit und Speicher.

Oder ist da sonst noch etwas zu berücksichtigen?[/quote]
es ist ausserdem portabler, das modul zu verwenden, da es (theoretisch)
systeme geben könnte, bei denen die konstanten andere werte haben.
ausserdem finde ich es viel lesbarer. LOCK_SH = shared lock,
LOCK_EX = exclusive, LOCK_NB = non blocking.
glaube auch nicht, dass das modul so viel ladezeit und speicher braucht.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
<< |< 1 2 3 >| >> 27 Einträge, 3 Seiten



View all threads created 2004-07-11 16:56.