NDBM_File
СОДЕРЖАНИЕ
НАЗВАНИЕ
NDBM_File - Связанный доступ к файлам ndbm
СИНТАКСИС
use Fcntl; # For O_RDWR, O_CREAT, etc.
use NDBM_File;
tie(%h, 'NDBM_File', 'filename', O_RDWR|O_CREAT, 0666)
or die "Couldn't tie NDBM file 'filename': $!; aborting";
# Now read and change the hash
$h{newkey} = newvalue;
print $h{oldkey};
...
untie %h; ОПИСАНИЕ
NDBM_File устанавливает соединение между переменной Perl hash и файлом в формате NDBM_File;. Вы можете манипулировать данными в файле так же, как будто они находятся в переменной Perl hash, но когда ваша программа завершится, данные останутся в файле, чтобы быть использованными в следующий раз, когда ваша программа запустится.
Используйте NDBM_File с встроенной функцией Perl tie для установления соединения между переменной и файлом. Аргументы для tie должны быть:
-
Переменная hash, которую вы хотите связать.
-
Строка
"NDBM_File". (Это сообщает Perl использовать пакетNDBM_Fileдля выполнения функций hash.) -
Имя файла, который вы хотите связать с hash.
-
Флаги. Используйте один из:
O_RDONLY-
Только чтение данных из файла.
O_WRONLY-
Только запись данных в файл.
O_RDWR-
И чтение, и запись.
Если вы хотите создать файл, если он не существует, добавьте
O_CREATк любому из этих, как в примере. Если вы опуститеO_CREATи файл ещё не существует, вызовtieзавершится неудачей. -
По умолчанию права, которые будут использоваться, если новый файл будет создан. Фактические права будут изменены маской пользователя, поэтому вы, вероятно, должны использовать 0666 здесь. (См. "umask" в perlfunc.)
ДИАГНОСТИКА
При ошибке вызов tie возвращает неопределённое значение и, вероятно, задаёт $! для того, чтобы содержать причину, по которой файл не смог быть связан.
ndbm store returned -1, errno 22, key "..." at ...
Это предупреждение выводится, когда вы пытаетесь сохранить ключ или значение, которые слишком длинные. Это означает, что изменение не было записано в базу данных. См. ОШИБКИ И ПРЕДУПРЕЖДЕНИЯ ниже.
БЕЗОПАСНОСТЬ И ПЕРЕНОСИМОСТЬ
Не принимайте файлы NDBM из ненадежных источников.
На современных системах Linux это обычно файлы GDBM, которые не являются переносимыми между платформами.
Документация GDBM не подразумевает, что файлы из ненадежных источников могут безопасно использоваться с libgdbm.
Системы, которые не используют совместимость GDBM для поддержки ndbm, будут использовать платформенно-специфичную библиотеку, возможно, унаследованную от систем BSD, где использование недоверенного файла может быть или не быть безопасным.
Злонамеренно созданный файл может привести к сбою Perl или даже к раскрытию уязвимости безопасности.
ОШИБКИ И ПРЕДУПРЕЖДЕНИЯ
Существует ряд ограничений на размер данных, которые вы можете хранить в файле NDBM. Самое важное — длина ключа плюс длина связанного с ним значения не должна превышать 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/NDBM_File