Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Системное программирование > unlink file1, file2


Автор: kostofffan 22.7.2004, 23:16
Такой отрывочек кода:
Код
if (-e $dir.$player.'_'.$enemy.'.dir') {
dbmopen(%fight, $dir.$player.'_'.$enemy, 0777);
$file_name = $dir.$player.'_'.$enemy;
}
elsif (-e $dir.$enemy.'_'.$player.'.dir') {
dbmopen(%fight, $dir.$enemy.'_'.$player, 0777);
$file_name = $dir.$enemy.'_'.$player;
}
............
if ($fight{'end'}) {
               dbmclose %fight;
               dbmopen %players, 'players', 0777;
$players{$player} = ($players{$player} =~ /^(\d+::)/)[0];
$players{$enemy} = ($players{$enemy} =~ /^(\d+::)/)[0];
dbmclose %players;
print $file_name, "\n";
sleep 5;
(unlink $file_name.'.dir', $file_name.'.pag') || print "0 files deleted: $!\n";
return "END$eol";
} else {
..............


Прикол в том что из этого кода файлы не удаляются. Но когда я копирую:
Код
dbmopen(%fight, $dir.$player.'_'.$enemy, 0777);
dbmclose %fight;
(unlink $file_name.'.dir', $file_name.'.pag') || print "0 files deleted: $!\n";

в новую программу, то файлы чудесно удаляются...
В чем бок.

Сенкс.

P.S.: для чего нужен dir-файл? Он всегда занимает 0 байт. (Может он используется как временный во время выполнения?)

Автор: kostofffan 24.7.2004, 01:21
Честно говоря, я долго улыбался, когда до меня дошло!
Дело в том что удаление не получалось так как эти файлы все еще использовались.
Прикол такой, что во время выполнения проверки типа :
Код
if ($fight{'end'}) {dbmclose %fight; ....} else {....}

прога все еще использует эту dbm до окончания блока if. (При чем до окончания всех блоков if)
К примеру, если есть такой код:
Код
if ($dbmbase{..}) {
      if ($dbbase{..}) {
          ..........
      } else {}
}

то программа не даст удалить dbm до окончания самого первого if-блока!
Короче, надолбался я с этим....

Автор: kostofffan 24.7.2004, 01:24
Да, я забыл упомянуть, что теперь выдается ошибка:
Код
Bad file descriptor

но несмотря на это файлы прекрасно удаляются... бывает же ;)

P.S.: кто знает к чему эта ошибка, подскажите!

Автор: Чудик 24.7.2004, 04:12
Так это знают ВСЕ даже я

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)