Spec-Zone.ru › Perl 5.38

SDBM_File

СОДЕРЖАНИЕ

  • ИМЯ
  • СИНТАКСИС
  • ОПИСАНИЕ
    • Связывание
  • ЭКСПОРТИРУЕТСЯ
  • ДИАГНОСТИКА
    • sdbm store returned -1, errno 22, key "..." at ...
  • ПРЕДУПРЕЖДЕНИЕ О БЕЗОПАСНОСТИ
  • ОШИБКИ И ПРЕДУПРЕЖДЕНИЯ

ИМЯ

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–2023 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.38.0/SDBM_File

Spec-Zone.ru

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