   ################################################################
   #######
   # #
   # unlock() Version 2.1 #
   # Written by Craig Patchett craig@patchett.com #
   # Created 16/09/1996 Last Modified 12/05/2000 #
   # #
   #Разблокирует файл заблокированный функцией lock()
   # Возвращает:     0 файл разблокирован
   #                 1 Если невозможно удалить lock-файл
   # Глобальные переменные: $error_message - информация о возникшей ошибке
   #                                              $NAME_LEN - максимальная длина файла
   # Во время работы удаляется $LOCK_DIR/$filename.lok
   #
   #####################################################################
   #######
   sub unlock {
   local($filename) = @_; #, $LOCK_DIR
   local($lock_file) = $filename;
   $lock_file =~ tr/\/\\:.//d; # Remove file separators/periods
   if ($NAME_LEN < length($lock_file)) {
   $lock_file = substr($lock_file, -$NAME_LEN);
   }
   $lock_file = "$LOCK_DIR$lock_file.lok";
   $error_message = '';
   # Проверка блокировки

   if (!open(LOCK, "<$lock_file")) {
   $error_message = "Нет доступа к заблокированному файлу \"$filename\"
   ($!).";
   return(1);
   }
   $lock_pid = <LOCK>;
   close(LOCK);
   if ($lock_pid ne $$) {
   $error_message = "Файл \"$filename\" заблокирован другим процессом.";
   return(2);
   }
   #Удаление lock-файла
   if (!unlink($lock_file)) {
   $error_message = "Невозможно разблокировать файл \"$filename\"
   ($!).";
   return(3);
   }
   return(0);
   }
   #
   # пример кода с использванием этих процедур
   # взято на фонарь из одного из скриптов :)) (рассылка сообщений, кстати)
   #
   ...
   if (&lock("$USERS_DIR$user_name/$MESSAGES_DIR$message_file")) {
   $bad_users .= ($bad_users eq "") ? $user_name : ", ".$user_name;
   next;
   }
   if (!open(BOX,">>$USERS_DIR$user_name/$MESSAGES_DIR$message_file")) {
   &unlock("$USERS_DIR$user_name/$MESSAGES_DIR$message_file");
   $bad_users .= ($bad_users eq "") ? $user_name : ", ".$user_name;
   next;
   }
   