Spec-Zone.ru › Perl 5.30

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 — биты разрешений для файлов, которые будут использоваться при создании новых файлов базы данных. Этот параметр обязателен даже при отсутствии создания новой базы данных. Разрешения будут уменьшены с учетом маски пользователя, поэтому типичным значением здесь будет 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–2020 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.30.3/SDBM_File

Spec-Zone.ru

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