SDBM_File
СОДЕРЖАНИЕ
- НАЗВАНИЕ
- СИНТАКСИС
- ОПИСАНИЕ
- ЭКСПОРТИРУЕТСЯ
- ДИАГНОСТИКА
- ПРЕДУПРЕЖДЕНИЕ О БЕЗОПАСНОСТИ
- ОШИБКИ И ПРЕДУПРЕЖДЕНИЯ
НАЗВАНИЕ
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— максимальный размер сохранённой записи hash, включая длину ключа и значения.
Эти константы также могут быть использованы с полными именами, например, 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.36.0/SDBM_File