Могу ли я использовать файловый дескриптор вместо имени файла для создания файлов DBM? - PullRequest
0 голосов
/ 12 июня 2010

Я использую MLDBM для сохранения некоторых структур данных Perl, и мне интересно, есть ли альтернатива следующему:

tie %hash, "MLDBM", $dbm_file, O_CREAT | O_RDWR, 0644;

Прежде всего, я бы хотел бы , чтобы иметь возможность использовать STDOUT, а не известное имя файла. Затем его можно перенаправить в файл на стороне оболочки.

Я искал по ключевым словам, таким как "tie", "DBM" и "filehandle", но хиты обычно говорят о привязке файловых дескрипторов к вещам, а не к файловым дескрипторам.

Есть предложения?

Ответы [ 2 ]

3 голосов
/ 12 июня 2010

Ну, MLDBM это не волнует, поскольку он просто передает параметры в базовую библиотеку dbm (например, DB_File или GDBM_File ).Но я не знаю ни одной библиотеки dbm, которая принимает файловый дескриптор вместо имени файла.Кроме того, файл dbm должен быть доступен для поиска, поэтому оболочка должна перенаправлять его на реальный файл, а не на канал.И STDOUT, вероятно, будет открыт только для записи, что не сработает для файла dbm.

Если вы просто используете MLDBM для сохранения, а не потому, что база данных слишком велика для памяти, тогда вы могли быпопробуйте другой подход.Используйте Storable , чтобы сохранить ваши структуры данных.Он может читать и писать в уже открытый файловый дескриптор.

2 голосов
/ 12 июня 2010

Помните, что STDOUT - это поток, последовательность байтов, которая должна читаться последовательно, как лента. Модули DBM обеспечивают персистентность, ориентированную на записи, где вы можете читать и писать в произвольные записи.

Чтобы подделать DBM поверх STDOUT, вам нужно вывести какой-нибудь формат журнала. Запись в STDOUT имеет более высокий приоритет, чем при использовании DBM, поэтому, возможно, более подходящий формат будет более подходящим.

С более подробной информацией о вашем приложении мы могли бы предложить более полезные для вас предложения.

...