|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Konstantin Tokar 2:5020/400 25 Apr 2002 14:39:04 To : Yevgeny Manyashev Subject : Re: Проблема при блокировке DBM файла -------------------------------------------------------------------------------- Yevgeny Manyashev wrote: > > Программа в цикле пишет статистику в кучу DBM файлов - > один файл при каждом проходе. > Проблемы появились при блокировке этих файлов. > ... Я переписал твой скрипт, в виндовсе он работает. 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); } --- ifmail v.2.15dev5 * Origin: Demos online service (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/12770131e8de6.html, оценка из 5, голосов 10
|