|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Yevgeny Manyashev 2:5020/400 26 Apr 2002 07:42:07 To : Konstantin Tokar Subject : Re: Проблема при блок ировке DBM файла -------------------------------------------------------------------------------- Konstantin Tokar wrote: > Yevgeny Manyashev wrote: > >>Программа в цикле пишет статистику в кучу DBM файлов - >>один файл при каждом проходе. >>Проблемы появились при блокировке этих файлов. >> Решил проблему, использовав use DB_File::Lock; tie %data, 'DB_File::Lock', "$data_file", O_CREAT|O_RDWR, 0666, $DB_HASH, 'write' or die $!; > ... > Я переписал твой скрипт, в виндовсе он работает. Hо это неважно, как и > твоя ошибка, так как в том же мане написано, почему твой метод > блокировки использовать не следует, и какой следует. > > #!perl -w > use strict; > use DB_File; > > BEGIN { > require Fcntl; > if (exists $Fcntl::EXPORT_TAGS{'flock'}) { > Fcntl->import(':flock'); > } else { > eval q{ > sub LOCK_SH () {1} > sub LOCK_EX () {2} > }; > } > } > > > while(my $data_file=<>){ > chomp $data_file; > > my %data; > my $db = tie %data, 'DB_File', "$data_file", O_CREAT|O_RDWR, 0666 > or die "Don't tie to data file $data_file.\n"; > > #Блокирую его > my $fd = $db->fd; > open( DB_FH, "+<&=$fd" ) or die "dup $!"; > flock( DB_FH, LOCK_EX ) or die "flock: $!"; > > #Пишу данные > $data{'$foo'} = '$bar'; > > #Затем снимаю блокировку и закрываю файл > flock(DB_FH, LOCK_UN); > undef $db; > untie %data; > close(DB_FH); > } -- Best regards. --- ifmail v.2.15dev5 * Origin: Sibnet (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/36250873e90d.html, оценка из 5, голосов 10
|