Spec-Zone.ru › Perl 5.34

SDBM_File

СОДЕРЖАНИЕ

  • НАЗВАНИЕ
  • СИНТАКСИС
  • ОПИСАНИЕ
    • Связывание
  • ЭКСПОРТИРУЕМЫЕ ЭЛЕМЕНТЫ
  • ДИАГНОСТИКА
    • sdbm store вернул -1, errno 22, ключ "..." в ...
  • ПРЕДУПРЕЖДЕНИЕ О БЕЗОПАСНОСТИ
  • ОШИБКИ И ПРЕДУПРЕЖДЕНИЯ

НАЗВАНИЕ

SDBM_File — Связывание с файлами формата sdbm

СИНТАКСИС

use Fcntl;   # For O_RDWR, O_CREAT, etc.
use SDBM_File;

tie(%h, 'SDBM_File', 'filename', O_RDWR|O_CREAT, 0666)
  or die "Couldn't tie SDBM file 'filename': $!; aborting";

# Now read and change the hash
$h{newkey} = newvalue;
print $h{oldkey}; 
...

untie %h;

ОПИСАНИЕ

SDBM_File устанавливает связь между переменной Perl hash и файлом в формате SDBM_File. Вы можете манипулировать данными в файле так, как если бы они находились в переменной Perl hash, но при завершении программы данные останутся в файле для использования при следующем запуске программы.

Связывание

Используйте SDBM_File с встроенной функцией Perl tie, чтобы установить связь между переменной и файлом.

tie %hash, 'SDBM_File', $basename, $modeflags, $perms;

tie %hash, 'SDBM_File', $dirfile,  $modeflags, $perms, $pagfilename;

$basename — это имя базового файла для базы данных. База данных представляет собой два файла с расширениями ".dir" и ".pag", добавленными к $basename,

$basename.dir     (or .sdbm_dir on VMS, per DIRFEXT constant)
$basename.pag

Два имени файлов также можно указать полностью как $dirfile и $pagfilename. Это подходит для двух файлов без расширений ".dir" и ".pag", например, для двух файлов из File::Temp.

$modeflags может быть следующими константами из модуля Fcntl (в стиле системного вызова open(2)),

O_RDONLY          read-only access
O_WRONLY          write-only access
O_RDWR            read and write access

Если вы хотите создать файл, если он ещё не существует, то выполните побитовое ИЛИ (|) O_CREAT тоже. Если вы опустите O_CREAT и база данных ещё не существует, то вызов tie завершится ошибкой.

O_CREAT           create database if doesn't already exist

$perms — это биты разрешений файла, которые следует использовать, если создаются новые файлы базы данных. Этот параметр обязателен даже при отсутствии создания новой базы данных. Разрешения будут уменьшены на значение umask пользователя, поэтому типичным значением здесь будет 0666, или, если данные очень конфиденциальные, 0600. (См. "umask" в perlfunc.)

ЭКСПОРТИРУЕМЫЕ ЭЛЕМЕНТЫ

SDBM_File необязательно экспортирует следующие константы:

  • PAGFEXT — расширение, используемое для страницы файла, обычно .pag.

  • DIRFEXT — расширение, используемое для каталога файла, .dir повсеместно, но на VMS, где оно .sdbm_dir.

  • PAIRMAX — максимальный размер сохранённой записи хэш-таблицы, включая длину ключа и значения.

Эти константы также могут быть использованы с полными именами, например SDBM_File::PAGFEXT.

ДИАГНОСТИКА

При ошибке вызов tie возвращает неопределённое значение и, вероятно, устанавливает $! для указания причины, по которой файл не удалось связать.

sdbm store returned -1, errno 22, key "..." at ...

Это предупреждение выдаётся, когда вы пытаетесь сохранить ключ или значение, длина которых слишком велика. Это означает, что изменение не было записано в базу данных. См. ОШИБКИ И ПРЕДУПРЕЖДЕНИЯ ниже.

ПРЕДУПРЕЖДЕНИЕ О БЕЗОПАСНОСТИ

Не принимайте файлы SDBM из ненадежных источников!

Формат файла sdbm был разработан для скорости и удобства, а не для портативности или безопасности. Злонамеренно созданный файл может привести к аварийному завершению работы Perl или даже к уязвимости безопасности.

ОШИБКИ И ПРЕДУПРЕЖДЕНИЯ

Существует ряд ограничений на размер данных, которые вы можете хранить в файле SDBM. Самое важное — длина ключа плюс длина связанного с ним значения не должна превышать 1008 байт.

См. "tie" в perlfunc, perldbmfilter, Fcntl

© 1993–2021 Larry Wall and others
Licensed under the GNU General Public License version 1 or later, or the Artistic License.
The Perl logo is a trademark of the Perl Foundation.
https://perldoc.perl.org/5.34.0/SDBM_File

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API