我可以使用文件句柄代替文件名来创建DBM文件吗?

问题描述:

我使用MLDBM坚持一些Perl数据结构,我想知道是否有以下的选择:我可以使用文件句柄代替文件名来创建DBM文件吗?

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

首先,我倒是喜欢能够使用标准输出,而不是一个已知的文件名。这可以被重定向到shell侧的文件。

我一直在用像“tie”,“DBM”和“filehandle”这样的关键字进行搜索,但这些命中常常讨论将文件句柄绑定到事物上,而不是文件句柄。

有什么建议吗?

那么,MLDBM不会在乎,因为它只是将参数传递给底层dbm库(例如,DB_FileGDBM_File)。但我不知道任何接受文件句柄而不是文件名的dbm库。此外,dbm文件需要可查找,因此shell必须重定向到实际文件,而不是管道。并且STDOUT可能会以只写方式打开,这对dbm文件不起作用。

如果您只是使用MLDBM来实现持久性,而不是因为数据库对于内存来说太大,那么您可以尝试不同的方法。使用Storable来坚持你的数据结构。它可以读取&写入已经打开的文件句柄。

请记住,STDOUT是一个流,必须像磁带一样按顺序读取的字节序列。 DBM模块提供了面向记录的持久性,您可以在其中读取和写入任意记录。

要伪造以上的DBM,您需要输出某种日志格式。写入STDOUT似乎具有比使用DBM更高的优先级,因此可能采用不同的格式更合适。

有关您的应用程序的更多信息,我们可以提供对您更有用的建议。