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-хэш и файлом в формате SDBM_File. Вы можете манипулировать данными в файле так, как будто они хранятся в Perl-хэше, но после завершения программы данные останутся в файле, чтобы быть использованными при следующем запуске.
Привязка
Используйте 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–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.32.0/SDBM_File